2014-09-11 90 views
1

我使用收到我的數據庫中的內容:PHP顯示怪異字符的UTF8字符

$strip_title = html_entity_decode(strip_tags($title),ENT_QUOTES,'UTF-8'); 

它的正確顯示以該字符串echo後:

[MV HD] Nợ Ai Đó Cả Thế Giới – Phạm Quỳnh Anh 

但是當我上面顯示的字符串作爲使用str_split功能:

$result = str_split($title); 
echo "<pre>"; 
print_r($result); 
echo "</pre>"; 

然後結果看起來像這樣:

Array 
(
    [0] => [ 
    [1] => M 
    [2] => V 
    [3] => 
    [4] => H 
    [5] => D 
    [6] => ] 
    [7] => 
    [8] => N 
    [9] => � 
    [10] => � 
    [11] => � 
...................... 

我在做什麼錯在這裏?如何糾正這個問題?

您可以在此sandbox demo

+1

問題是你正在爲utf-8文本使用'str_x'函數,其中1個字符不等於數組中的1個字符,因此你需要使用'mb_x'系列函數。 – 2014-09-11 04:18:55

回答

1
// this function is get from http://php.net/manual/en/function.str-split.php 
function str_split_unicode($str, $l = 0) { 
    if ($l > 0) { 
     $ret = array(); 
     $len = mb_strlen($str, "UTF-8"); 
     for ($i = 0; $i < $len; $i += $l) { 
      $ret[] = mb_substr($str, $i, $l, "UTF-8"); 
     } 
     return $ret; 
    } 
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); 
} 

$title = "[MV HD] Nợ Ai Đó Cả Thế Giới - Phạm Quỳnh Anh"; 
$result = str_split_unicode($title); 
echo "<pre>"; 
print_r($result); 
echo "</pre>"; 

Sandbox Demo看一看。