Ant*_*ton 19
如何使用mb_strlen()?
http://lt.php.net/manual/en/function.mb-strlen.php
但是如果你需要使用strlen,可以通过将mbstring.func_overload指令设置为2来配置你的web服务器,这样它就会在你的脚本中自动替换使用strlen到mb_strlen.
您发布的字符串长度为六个字符:$1�2(美元符号,数字1,带有分音符的小写字母i,颠倒的问号,一半分数,数字二)
如果使用该字符串的UTF-8表示调用strlen(),则会得到9的结果(可能,虽然有多个具有不同长度的表示).
但是,如果我们将该字符串存储为ISO 8859-1或CP1252,我们将有一个六字节长的序列,合法的为UTF-8.将这6个字节重新解释为UTF-8将产生4个字符:$1 2(美元符号,数字1,Unicode替换字符,数字2).也就是说,单个字符' '的UTF-8编码与三个字符"�"的ISO-8859-1编码相同.
当UTF-8解码器读取的数据不是有效的UTF-8数据时,通常会插入替换字符.
似乎原始字符串是通过多层误解来处理的; 通过在非UTF-8数据上使用UTF-8解码器(产生$1 2),然后通过用于分析该数据的任何数据(产生$ 1 ^ 2).
很可能在问题的准备和你的阅读之间的某个时刻,某些进程已经破坏了非ASCII字符,因此问题最初是关于一些字符串,其中包含4个字符.
�当您以UTF-8 编码替换字符U + FFFD( )并将结果解释为latin1 时,将获得序列.例如,此字符用于替换在从文件读取文本时不对任何字符进行编码的字节序列.发生了什么事可能是这样的:
存储在latin1文本文件中的原始问题具有:( $1¢2您可以将¢替换为任何非ASCII字符)
该文件由使用UTF-8的程序读取.由于无法解释对应于¢的字节,程序将替换它并读取文本$1?2.然后使用UTF-8写出该文本,从而生成$1\xEF\xBF\xBD2文件.
然后是第三个程序来读取latin1中的文件,然后显示$1�2.
| 归档时间: |
|
| 查看次数: |
25976 次 |
| 最近记录: |