0

我有标题中描述的问题。如果我使用

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

我输入hello à 和 ì返回的 new_word 是 *hello 和 * 为什么?

有人建议我指定我想以这种方式转换的所有字符

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

,但我希望我的应用程序适用于所有现有的口音(对于多语言网站)。你能帮助我吗?谢谢。

编辑:我指定我使用这个正则表达式来净化标点符号。它很好地净化了所有标点符号,但 unicode 字符错误返回,实际上甚至没有返回。

编辑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

尝试使用多字节字符串PHP 库中mb_ereg_match()的(而不是preg_match()) 。它专为处理多字节字符串而设计。

于 2012-05-05T17:21:03.420 回答