我有一个字符串,其中包含很多我想清理的空格和换行符,所以我使用:
$str = trim(preg_replace('/\s+/', ' ', $str));
但是,当我回显 $str 时,我注意到像“à”这样的特殊字符变成了 �。
当我删除 preg_replace 时, � 再次变为“à”,但我的字符串中充满了空格和换行符。
我试过谷歌(ofc),但似乎没有很多人遇到这个问题:)
我对 PHP 的了解是中级的,所以我(仍然)有点缺乏对这个问题可能发生在哪里的洞察力 :)
我有一个字符串,其中包含很多我想清理的空格和换行符,所以我使用:
$str = trim(preg_replace('/\s+/', ' ', $str));
但是,当我回显 $str 时,我注意到像“à”这样的特殊字符变成了 �。
当我删除 preg_replace 时, � 再次变为“à”,但我的字符串中充满了空格和换行符。
我试过谷歌(ofc),但似乎没有很多人遇到这个问题:)
我对 PHP 的了解是中级的,所以我(仍然)有点缺乏对这个问题可能发生在哪里的洞察力 :)
我有同样的问题。preg_replace 将破坏 UTF-8 字符串,如果它具有以下字符之一(在此仅提及一些更常见的情况):
(U+00E0) : à Latin small letter a with grave
(U+0160) : Š Latin capital letter s with caron
(U+03A0) : Π Greek capital letter pi
(U+0420) : Р Cyrillic capital letter er
答案是使用 UTF-8 模式修饰符。有一个问题:UTF-8 可以包含未被\s
. 所以你必须添加\p{Z}
到你的模式中,这匹配所有的空格。所以使用:
$str = preg_replace( '/[\p{Z}\s]+/u', ' ', $str );
也许这样的事情可能会有所帮助,因为字符集可能有问题
$text = utf8_decode($text);
$text = trim(preg_replace('/\s+/', ' ', $text));
$text = utf8_encode($text);
你得到 utf-8 输入吗?