我有以下代码似乎正在改变我的字符集。
$html = "à";
echo $html; // result: à
$html = preg_replace("/\s/", "", $html);
echo $html; // result: ?
但是,当我使用[\t\n\r\f\v]
作为我的模式而不是特殊字符\s
时,它可以正常工作:
$html = "à";
echo $html; // result: à
$html = preg_replace("/[\t\n\r\f\v]/", "", $html);
echo $html; // result: à
为什么?
答案 0 :(得分:11)
我有同样的问题。这是因为UTF8。
UTF8中的 à
为0xc3a0
。在PHP中,您可以这样写:"\xc3\xa0"
。
对于PCRE,/s
匹配0xa0
就像是ASCII“非破坏空间”。
您可以使用u
flag解决问题。
$html = preg_replace("/\s/u", "", $html);