假设我正在使用UTF-8编码我的文件。
在PHP脚本中,将比较一个字符串:
$string="ぁ";
$string = utf8_encode($string); //Do i need this step?
if(preg_match('/ぁ/u',$string))
//Do if match...
如果您使用UTF-8编码,那么是否真的需要utf8_encode()函数对字符串进行编码呢?
假设我正在使用UTF-8编码我的文件。
在PHP脚本中,将比较一个字符串:
$string="ぁ";
$string = utf8_encode($string); //Do i need this step?
if(preg_match('/ぁ/u',$string))
//Do if match...
如果您使用UTF-8编码,那么是否真的需要utf8_encode()函数对字符串进行编码呢?
utf8_encode
的手册条目,它会将一个ISO-8859-1编码的字符串转换为UTF-8。函数名是一个非常糟糕的误导,因为它暗示了一些必要的自动编码。但实际上不是这样的情况。如果你的源代码已经保存为UTF-8,并且你将 "あ" 赋值给$string
,那么$string
将持有以UTF-8编码的字符 "あ"。不需要进行进一步的操作。实际上,试图(错误地)从ISO-8859-1转换UTF-8格式的字符串将导致乱码。"
都被PHP解释为"
。PHP会将引号之间的任何内容直接视为文字位序列。所以PHP把你的"あ"
看作是"11100011 10000001 10000010"
,并不关心引号之间到底是什么,它只是按照原样使用。PHP通常不关心字符串编码,字符串在PHP中是二进制数据,因此如果您需要编码,请了解字符串内部数据的编码。问题是:在您的情况下,编码是否重要?
如果您像这样设置了字符串变量的内容:
$string="ぁ";
$string="ä";
if ( 'ä' === $string )
# do your stuff
$string="ä";
if ( 'ä' === $string )
# do your stuff
$string="ぁ";
如果我将文件编码为 UTF-8,它 不会包含 UTF-8,而是包含一个无效的二进制序列。 - nEAnnam$string="ぁ";
对我来说显示为日语的あ非常正常。那确实是一个有效的UTF-8字符。不确定你看到了什么... - deceze[?]
的字符,根据你们所写的内容,我现在确定我缺少一个字体。所以忽略那部分说它无效的内容,这是我的错误(:D)。只要它是有效的,就像 ä
一样,那部分应该仍然是有效的。已编辑答案,希望现在更好了。 - hakre你的字符串不是utf-8字符,所以无法进行preg匹配,因此你需要使用utf8_encode对其进行编码。尝试将PHP文件编码为utf-8(使用类似Notepad++的工具),这样可能就不需要进行编码了。
摘要:
utf8_encode()
函数将给定字符串中的每个字节编码为UTF-8。
无论之前使用什么编码存储文件。
它的目的是编码尚未为UTF-8的字符串¹。
1.- 正确使用此函数的方法是将ISO-8859-1字符串作为参数传递。 为什么?因为Unicode和ISO-8859-1在相同位置具有相同的字符。
[Char][Value/Position] [Encoded Value/Position]
[Windows-1252] [€][80] ----> [C2|80] Is this the UTF-8 encoded value/position of the [€]? No
[ISO-8859-1] [¢][A2] ----> [C2|A2] Is this the UTF-8 encoded value/position of the [¢]? Yes
这个函数似乎可以与其他编码一起工作:如果要编码的字符串只包含与ISO-8859-1编码相同值的字符(例如在Windows-1252中的00-EF & A0-FF
位置),它就能正常工作。
需要注意的是,如果该函数接收到一个UTF-8字符串(以UTF-8编码的文件),它将再次对该UTF-8字符串进行编码,并产生垃圾数据。