0

タイトルに記載されている問題があります。私が使用する場合

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

hello à と ìを入力すると、返される new_word は *hello and * Why? です。

この方法で変換したいすべての文字を指定するようにアドバイスされました

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

、しかし、アプリケーションが既存のすべてのアクセントで動作することを望みます (多言語 Web サイトの場合)。手伝って頂けますか?ありがとう。

編集:この正規表現を使用して句読点を浄化することを指定します。すべての句読点を適切に浄化しますが、Unicode 文字は間違って返され、実際には返されません。

EDIT 2:申し訳ありませんが、説明が不十分でした。問題は preg_match_all ではなく、

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

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

4

2 に答える 2

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
于 2012-05-05T17:46:09.553 に答える
0

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

于 2012-05-05T17:21:03.420 に答える