簡體   English   中英

regexunicode-使用preg_match_all時刪除重音字符

[英]regexunicode - Accented characters are removed when using preg_match_all

我有標題中描述的問題。 如果我用

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úù');

我必須手動指定帶重音符號的字符,但我認為還有很多其他字符。 對?

\\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

嘗試使用Multibyte String PHP庫中的mb_ereg_match() (而不是preg_match() )。 它是專門為處理多字節字符串而設計的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM