php 5.3.8_在PHP 5.3中替换UTF-8字符 - php

为什么这个测试用例不起作用?

// cards with cyrillic inidices and suits in UTF-8 encoding

$a = array('7♠', 'Д♠', 'К♠', '8♦', 'В♦', 'Д♦', '10♣', '10♥', 'В♥', 'Т♥');

foreach ($a as $card) {

$suit = substr($card, -1);

$card = preg_replace('/(\d+)♥/', '$1♥', $card);

$card = preg_replace('/(\d+)♦/', '$1♦', $card);

$card = preg_replace('/(\d+)♠/', '$1♠', $card);

$card = preg_replace('/(\d+)♣/', '$1♣', $card);

printf("suit: %s, html: %s\n", $suit, $card);

}

?>

输出:

suit: ▒, html: 7♠

suit: ▒, html: Д♠

suit: ▒, html: К♠

suit: ▒, html: 8♦

suit: ▒, html: В♦

suit: ▒, html: Д♦

suit: ▒, html: 10♣

suit: ▒, html: 10♥

suit: ▒, html: В♥

suit: ▒, html: Т♥

即我在PHP脚本中遇到2个问题:

为什么最后一个UTF-8字符不能正确提取?

为什么只用preg_replace代替第一诉讼?

使用PHP 5.3.3,PostgreSQL 8.4.12在CentOS 6.2上保留UTF-8 JSON(带有俄语文本和卡片套)。

如果1.是PHP 5.3.3中的错误,那么有没有好的解决方法? (我不想升级库存包)。

更新:

$a = array('7♠', 'Д♠', 'К♠', '8♦', 'В♦', 'Д♦', '10♣', '10♥', 'В♥', 'Т♥');

foreach ($a as $card) {

$suit = mb_substr($card, -1, 1, 'UTF-8');

$card = preg_replace('/(\d+)♥/u', '$1♥', $card);

$card = preg_replace('/(\d+)♦/u', '$1♦', $card);

$card = preg_replace('/(\d+)♠/u', '$1♠', $card);

$card = preg_replace('/(\d+)♣/u', '$1♣', $card);

printf("suit: %s, html: %s\n", $suit, $card);

}

?>

新的输出:

suit: ♠, html: 7♠

suit: ♠, html: Д♠

suit: ♠, html: К♠

suit: ♦, html: 8♦

suit: ♦, html: В♦

suit: ♦, html: Д♦

suit: ♣, html: 10♣

suit: ♥, html: 10♥

suit: ♥, html: В♥

参考方案

substr是朴素的PHP核心功能之一,它假定1个字节= 1个字符。 substr(..., -1)从字符串中提取最后一个字节。但是“♠”长于一个字节。您应该改用mb_substr($card, -1, 1, 'UTF-8')。

您需要将u (PCRE_UTF8) modifier添加到正则表达式中,以使其正确处理UTF-8编码的表达式和字符串:

preg_replace('/(\d+)♥/u', ...

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…php:拆分字符串,直到第一次出现数字 - php

我有像cream 100G sup 5mg Children 我想在第一次出现数字之前将其拆分。所以结果应该是array( array('cream','100G'), array('sup','5mg Children') ); 可以告诉我如何为此创建图案吗?我试过了list(…php getdate()-小时不正确 - php

我在iframe中将php用于计数器。我正在使用getdate();功能。我的当地时间不是下午12:16,如果我使用getdate();从php获取现在的本地时间,小时显示为13。我从php getdate()回答的值应该不是12吗?$d1=getdate(); $hournew=$d1['hours']; echo $hournew .…

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值