草庐IT

php - 为什么默认情况下 PHP 字符串函数不是多字节安全的?

为什么在PHP中默认不使用PHP多字节字符串函数(以mb_开头的函数)? 最佳答案 向后兼容。旧的PHP脚本依赖于非多字节功能。另请参阅:http://www.php.net/manual/en/mbstring.overload.php 关于php-为什么默认情况下PHP字符串函数不是多字节安全的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12716064/

php - 用于检测连续数字的正则表达式 - 不适用于非英语输入

大家好,我有这段代码可以检查5个或更多连续数字:if(preg_match("/\d{5}/",$input,$matches)>0)returntrue;它适用于英语输入,但当输入字符串包含阿拉伯语/多字节字符时它会出错-即使输入文本中没有数字,它有时也会返回true。有什么想法吗? 最佳答案 您似乎在使用PHP。这样做:if(preg_match("/\d{5}/u",$input,$matches)>0)returntrue;注意表达式末尾的“u”修饰符。它告诉preg_*使用unicode模式进行匹配。

PHP多字节替代UTF8

我一直在寻找字符串操作函数的UTF8安全替代方案。我发现了很多不同的意见和建议。我想问一下以下函数是否会导致UTF-8出现问题,如果会,我应该使用什么来代替。我知道PHP手册中的mb_前缀函数列表,但并不是我正在使用的所有函数。函数有:内爆、爆炸、str_replace、preg_match、preg_replace谢谢 最佳答案 explode只是寻找相同的字节序列并在该点分隔字符串。由于UTF-8与ASCII安全地向后兼容,因此无需担心,它会正常工作。implode只是将字符串组合在一起,由于UTF-8的特性,它也能正常工作。s

php - 如何使用php获取包含特殊字符的字符串的第一个字符?

我使用string[0]来缩短和显示用户名/姓氏的第一个字符。在用户名以ö、ä、ü等特殊字符开头之前,它一直很有效。例如:$name='über';echo$name[0];//echoesnothing与此同时,我正在使用mb_substr($string,0,1)。但我真的很想念$name[0]:)。它更快更短。我仍然想知道原因是什么,是否有办法将这种语法与特殊字符一起使用。 最佳答案 字符ü不是单字节字符。它是一个多字节(两个字节)的字符。您正试图访问字符串的第一个字节,因此它不起作用。正是出于这个原因,设计了mb_subst

php - 奇怪的多字节 preg_replace 问题。它正在将我的数据更改为笑脸!

在Windows上使用PHP5.3.1。我只是想在数字和字母之间添加空格,但是PHP正在破坏我的数据!$text="TUES:8:30AM-5:00PMTHURS:8:30AM-5:00PMSAT:8:00AM-1:00PM";echopreg_replace("/([0-9]+)([A-Z]+)/","\1\2",$text);>TUES:8:☺☻AM-5:☺☻PMTHURS:8:☺☻AM-5:☺☻PMSAT:8:☺☻AM-1:☺☻PM我的文件类型是ANSI,不,源代码中没有unicode。这里有什么好玩的? 最佳答案 尝试使用$

PHP - 检查字符串是否为多字节字母数字字符

我需要查明一个字符串是否只包含一个字母数字字符。显而易见的解决方案是检查长度和ASCII码(A-Z、a-z、0-9)——但问题是我我正在处理UTF-8字符串和重音字母,例如á、ř、č等是否有一种简单的方法来检查UTF-8字符是否为字母数字(拉丁字母,可能带有重音符号或数字)? 最佳答案 这很容易用regularexpression完成:$count=preg_match_all('/\w/u',$string);if($count===1){echo"Onealphanumericcharacterfound";}\w将匹配任何“单

php - 无法为 Drupal 8 安装禁用多字节字符串输入转换

我安装了很多Drupal站点,以前从未遇到过这个问题。在尝试安装8.1.2时,我收到一条错误消息:MultibytestringinputconversioninPHPisactiveandmustbedisabled.Checkthephp.inimbstring.http_inputsetting.PleaserefertothePHPmbstringdocumentationformoreinformation.Drupal附带的.htaccess文件已经有一个部分应该禁用它:#PHP5,Apache1and2.php_valueassert.active0php_flagses

php - 多字节字符串和环视奇怪的错误

为什么以下代码对不同的多字节字符串表现不同?echopreg_replace('@(?=\pL)@u','*','م');//prints:'*م'✓echopreg_replace('@(?=\pL)@u','*','ض');//prints:'*ض'✓echopreg_replace('@(?=\pL)@u','*','غ');//prints:'*�*�'✗echopreg_replace('@(?=\pL)@u','*','ص');//prints:'*�*�'✗参见:http://3v4l.org/fvab1 最佳答案 您

PHP Regex - 两台服务器上的不同解析

我有一个以前没见过的问题。同一个正则表达式在两个不同的服务器上产生两个不同的结果。这是代码:preg_replace('#[^\pL0-9_@-]#iu','','!%&abc123_æøå');服务器A上的结果(php5.2.6,服务器Api:Apache2.0处理程序):abc123_æøå服务器B上的结果(php5.2.5,服务器Api:CGI/FastCGI):123_有人知道为什么会出现这种差异吗? 最佳答案 这一定是因为区域设置PHP多字节字符串支持开/关PHPmb_string.func_overload(为多字节支持

php - PHP 中的多字节安全 fread

我有一个太大而无法放入内存的文件,我需要从中删除某些字符(准确地说是控制字符)。我当前的函数如下所示:$old=fopen($file,'r');$new=fopen($tmpFile,'w');while(!feof($old)){fwrite($new,preg_replace('/[^\P{Cc}\t\r\n]/u','',fgets($old)));}rename($tmpFile,$file);这在大多数情况下都可以正常工作。一个可能的问题是fgets读取整行。我处理的一些文件实际上是巨大的单行文件,这仍然会导致内存问题。这可以使用fread修复,block大小为8192。但