rab*_*dde 9 php utf-8 multibyte
目前,我不明白为什么在处理UTF-8时在PHP中使用mbstring函数非常重要?我在linux下的语言环境已经设置为UTF-8,那么为什么函数不能strlen,preg_replace等等默认情况下无法正常工作?
Fra*_*nes 13
无论您的操作系统的语言环境如何,所有PHP 字符串函数都不会处理多字节字符串.这就是您需要使用多字节字符串函数的原因.
从多字节字符串简介:
当您操作(修剪,拆分,拼接等)以多字节编码编码的字符串时,您需要使用特殊函数,因为在此类编码方案中,两个或多个连续字节可能表示单个字符.否则,如果您对字符串应用非多字节感知字符串函数,它可能无法检测到多字节字符的开头或结尾,并最终导致损坏的垃圾字符串很可能失去其原始含义.
小智 6
这里的人不懂UTF-8.
您不需要使用UTF-8感知代码来处理UTF-8.在大多数情况下.
我甚至只使用字节感知功能编写了Unicode大写/小写,NFC和NFD变换.很难想到比这更复杂的东西,需要对UTF-8进行如此细致和细致的处理.但它仍然适用于仅字节函数.
您需要UTF-8感知代码是非常罕见的.也许计算字符数,或将插入点向前移动1个字符.但实际上,即使这样你的代码也无法工作;)因为分解了字符.
但是,如果您所做的只是替换,查找内容,甚至解析语法,您只需要字节感知功能.
我会解释原因.
这是因为在任何其他UTF-8字符中都找不到UTF-8字符.这就是它的设计方式.
尝试向我解释如何在多字节系统中获取文本处理错误,在多字节系统中,在另一个字符中找不到字符?只是一个例子!你能想到的最简单.
这是我用简单的英语回答。单个日文、中文和韩文字符占用多个字节。例如,一个典型的字符说x是在英语中需要 1 个字节,而1在日语、中文和韩语中则需要多于一个字节。现在 PHP 的标准字符串函数旨在将单个字符视为 1 个字节。因此,如果您尝试比较两个日语或中文或韩语字符,它们将无法按预期工作。例如“Hello World!”的长度 在日语或中文或韩语中将有超过 12 个字节。
阅读http://www.php.net/manual/en/intro.mbstring.php
| 归档时间: |
|
| 查看次数: |
10003 次 |
| 最近记录: |