我有标题中描述的问题。 如果我使用
preg_match_all('/\pL+/u', $_POST['word'], $new_word);
我键入helloà和<<< em>返回的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úù');
我不得不手动指定重音字符,但我认为还有很多其他字符。正确?
答案 0 :(得分: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
答案 1 :(得分:0)
尝试使用Multibyte String PHP库中的mb_ereg_match()
(而不是preg_match()
)。它专门用于处理多字节字符串。