簡體   English   中英

從PHP中的字符串中提取所有多字節字符

[英]Extract all multibyte characters from a string in PHP

我正在嘗試實現可與亞洲字符一起使用的str_word_count()版本。 但是,我不知道如何在給定的UTF-8字符串中分隔單字節和多字節字符。 我將使用什么函數在字符串中查找多字節字符?

例如,我可能想沿着單字節字符和多字節字符之間的邊界分割字符串。

'Test中國test中國' => array('Test','中國','test','中國');

我該怎么做?

有許多函數可以做到這一點,特別是Multibyte String Functions ,但是要注意的是所有多字節字符都計為1。這是幾個示例:

$str_en = "test";
$str_ch = '中國';

echo $str_en . " " . (str_word_count($str_en)) . " word(s)" . "\n";
echo $str_ch . " " . (mb_strlen($str_ch,'utf8')) . " word(s)" . "\n"; 
echo mb_strlen($str_ch,'utf8') + str_word_count($str_en) . " word(s) total";

輸出:

test 1 word(s)
中國 2 word(s)
3 word(s) total

上面的示例使用mb_strlen ,而下一個示例使用preg_match在遍歷數組時檢測其中的非ASCII字符。

$var = array('Test','中國','test','中國');

foreach($var as $char) {
    if (preg_match('/[\x80-\xFF]/', $char, $match)) {
        echo $char . " - " . mb_detect_encoding($char) . " - " .  str_word_count($char) . "word(s) \n";
        /* Detect character encoding with current detect_order */
    } else {
        /* Detect character encoding with current detect_order */
        echo $char . " - " . mb_detect_encoding($char) . " - " .  str_word_count($char) . "word(s) \n";
    }
}

print_r($ match)。 “\\ n” 個; //僅顯示匹配的非ASCII字符

輸出:

Test - ASCII - 1 word(s) 
中國 - UTF-8 - 2 word(s) 
test - ASCII - 1 word(s) 
中國 - UTF-8 - 2 word(s) 

暫無
暫無

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

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