5

正規表現を使用して、PHP の UTF8 文字列から空白文字の繰り返しを削除しようとしています。この正規表現

    $txt = preg_replace( '/\s+/i' , ' ', $txt );

通常は正常に動作しますが、一部の文字列にはキリル文字 "Р" が含まれており、交換後にねじ込まれています。ちょっとした調査の結果、文字は \x{D0A0} としてエンコードされていることに気付きました。\xA0 は ASCII の非改行空白であるため、正規表現はそれを \x20 に置き換え、文字は無効になります。

PHPで正規表現を使用してこれを適切に行う方法はありますか?

4

2 に答える 2

5

u修飾子を試してください:

$txt="UTF 字符串 with 空格符號";
var_dump(preg_replace("/\\s+/iu","",$txt));

出力:

string(28) "UTF字符串with空格符號"
于 2012-11-19T08:36:55.793 に答える
4

それは@http://www.php.net/manual/en/function.preg-replace.php#106981で説明されています

キャラクターだけでなく、ヨーロッパ、ロシア、中国語、日本語、韓国語などをキャッチしたい場合は、次のようにします。

  • mb_internal_encoding('UTF-8');を使用します。
  • preg_replace(' ...u'、'...'、$ string)をu(unicode)修飾子とともに使用します

詳細については、preg_*修飾子の完全なリストを http://php.net/manual/en/reference.pcre.pattern.modifiers.phpで見つけることができます。

于 2012-11-19T08:37:21.297 に答える