1

私がやろうとしているのは、文字列 (html タグ、余分な空白、引用符など) をクリーンアップすることですが、句読点や文字などのラテン文字を認めたいと思いñます。これを試しましたが、期待どおりに機能しない理由がわかりません:

コード

//Removing special characters
$str = preg_replace('/[^;\sa-zA-Z0-9áéíóúüñÁÉÍÓÚÜÑ]+/', '', $str);
//Deleting extra white spaces
$str = preg_replace('/\s+/', ' ', $str); 

in:       Película; Films; @Cine; Añoranza; <html></body>foo "bar    ";
out:      pelcula; Films; Cine; Aoranza;  foo bar
expected: Película; Films; Cine; Añoranza; foo bar

質問:

私のコードの問題は何ですか?どうすれば修正できますか? ラテン文字の部分だけが表現に取り組んでいないからです。

プラス:両方の正規表現を 1 つにマージするにはどうすればよいですか?

4

2 に答える 2

4

uUTF-8を使用している場合は、フラグを使用する必要があります。

$str = preg_replace('/[^;\sa-zA-Z0-9áéíóúüñÁÉÍÓÚÜÑ]+/u', '', $str);

データベース接続がutf-8であり、phpソースファイルの物理エンコーディングがutf-8であり、すべて機能することを確認してください。ただし、正規表現が魔法のようにhtmlパーサーになることはありません。

于 2013-01-14T04:15:59.150 に答える
0

この(見栄えの良い)方法を使用することもできます:

$str = preg_replace('/[^\p{Latin}]+/u', '', $str);
于 2015-07-01T21:02:41.977 に答える