1

クリーンアップしたい多くの空白と改行を含む文字列があるので、次を使用します。

$str = trim(preg_replace('/\s+/', ' ', $str));

ただし、$str をエコーアウトすると、「à」などの特殊文字が � に変わることに気付きます。

preg_replace を削除すると、 は再び " à " になりますが、文字列は空白と改行でいっぱいです。

私はGoogle(ofc)を試しましたが、この問題を経験している人はあまり多くないようです:)

私の PHP の知識は中程度なので、(まだ) この問題が発生する可能性がある場所についての洞察が欠けています :)

4

2 に答える 2

3

私は同じ問題を抱えていました。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 パターン修飾子を使用することです。問題が 1 つあります。UTF-8 には、\s. したがって、パターンに追加する必要があり\p{Z}ます。これはすべての空白に一致します。だから使用:

$str = preg_replace( '/[\p{Z}\s]+/u', ' ', $str );
于 2013-11-17T20:52:57.883 に答える
0

文字セットに問題がある可能性があるため、このようなものが役立つかもしれません

$text = utf8_decode($text);
$text = trim(preg_replace('/\s+/', ' ', $text));
$text = utf8_encode($text);

あなたはutf-8入力を取得していますか?

于 2013-05-21T10:31:06.477 に答える