2012-05-05 4 views
0

タイトルに記載されている問題があります。 私はregexunicode - preg_match_allを使用するとアクセント付き文字が削除されます

preg_match_all('/\pL+/u', $_POST['word'], $new_word); 

を使用して、私は なぜàと私返さnew_wordがある*ハローと* こんにちはを入力した場合は?

誰かが、私はこのよう

preg_match_all('/\pL+/u', $_POST['word'], 'aäeëioöuáéíóú'); 

に変換したいが、私は自分のアプリケーションが(多言語ウェブサイトのための)すべての既存のアクセントと連携したいすべての文字を指定するために私に助言しました。 私を助けることができますか?おかげさまで

EDIT:私はこの正規表現を使用して句読点を浄化するように指定します。それはよくすべての句読点を浄化するが、Unicode文字は間違って返され、実際には返されない。

EDIT 2:申し訳ありませんが、私は非常にひどく説明しました。 問題はpreg_match_allではありませんが、

str_word_count($my_key, 2, 'aäáàeëéèiíìoöóòuúù'); 

に私は手動でアクセント付き文字を指定する必要がありましたが、私は多くの人があると思います。右?

答えて

0

PHPライブラリからの代わりにmb_ereg_match()を使用してみてください。特にマルチバイト文字列を扱うために作られています。

3

\pLは、すべてのutf8文字とスペースに一致する必要があります。その$_POST['word']は、utf8でエンコードされた文字列であることを確認してください。そうでない場合は、一致する前にutf8_encode()を試してみるか、HTMLフォームのエンコーディングを確認してください。私のテストでは、あなたの例は魅力のように機能します。

あなたは単語の数を得るためにcount()と一緒に使用することができます。次に、可能な文字を気にする必要はありません。 \pLがこれを行います。これは、トリックを行う必要があります:

$string = "áll thât words wíth ìntérnâtiønal çhårs"; 

preg_match_all('/\pL+/u', $string, $words); 
echo count($words[0]); // returns: 6 
+0

こんにちは、あなたの答えをありがとう。 問題は、多くの言語(ヨーロッパ、アラビア語、中国語、キリル文字など)と互換性のあるアプリケーションを実現したいということです。 このように私は一般的な解決策を得ることができませんが、3番目の正規表現パラメータに指定された文字に限定されています – Tab

+0

正確に一致させたいものは何ですか?これらの(国際的な)文字の一部を含む可能性のある文字列と一致させる場合は、最初の例で可能でなければなりません。私のテストでは、マッチの完全な結果は '$ new_word'(_helloàとì_)にあります。それとも、そのような文字が含まれていても、その単語を数えたいだけですか? – mixable

+0

こんにちは、 問題はstr_word_count命令にあります! すべての特殊文字を指定しないと、指定されていないキャラクタは表示されません! この理由からアクセント付きの文字をいくつか指定しましたが、多言語サービスを提供することを意図しているので、他にも多くの文字が含まれていると思います。 – Tab

関連する問題