2013-01-01 29 views
2

嗯,我有一個網站有些地方我想提出其中標題是有點扭曲試圖擺脫一些字符函數utf8_encode的不會解決

我使用utf8_encodehtml_entity_decode(stripslashes($title),ENT_QUOTES, "UTF-8")等幾個解決方案,它沒有工作嘗試。我似乎無法擺脫他們:這裏有一個例子:我嘗試之前

標題:

New Era Miami Dolphins NFL® 9FIFTY� Solid Snap Miami Dolphins - Zappos.com Free Shipping BOTH Ways

這裏是函數utf8_encode和HTML實體後

New Era Miami Dolphins NFL® 9FIFTY⢠Solid Snap Miami Dolphins - Zappos.com Free Shipping BOTH Ways

其仍然存在問題 - 是否有辦法擺脫這些?

+0

哪裏輸入從何而來?從數據庫?對我來說,輸出看起來是正確的utf8字符。該輸出應該看起來/說什麼? – art2

+0

autoput應該只有英文。它不是來自數據庫,而是來自網站的標題標籤 –

+1

stripslashes將字符串中的所有斜槓和html_entity_decode轉換爲適用的字符,因此這些對您沒有用處。如果你只是想擺脫奇怪的字符使用:http://php.net/manual/en/function.preg-replace.php – art2

回答

0

看起來你的標題是UTF-8編碼的,但是你嵌入的HTML頁面實際上沒有標記爲UTF-8,所以瀏覽器使用默認字符集來解釋文本,這可能是ISO-8859-1。

假設頁面上的所有文本實際上都是UTF-8(或US-ASCII,它是其子集),最簡單的解決方案是隻發送適當的HTTP標頭(和/或元標籤)來指示正確的字符集。特別是,在PHP中你可以這樣做:

header("Content-Type: text/html; charset=utf-8"); 

,或者你可以在HTML代碼的頭部相當於meta標籤:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

,或者在HTML5,簡單地說:

<meta charset="utf-8"> 
0

您可以從百達WordPress的(seems_utf8)和modifie借用功能,您的需求:

function remove_none_utf8($str) { 
    $ret = ''; 

    $length = strlen($str); 

    for ($i=0; $i < $length; $i++) { 
      $ok = true; 

     $c = ord($str[$i]); 

     if ($c < 0x80) $n = 0; # 0bbbbbbb 

     elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb 

     elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb 

     elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb 

     elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb 

     elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b 

     else continue; # Does not match any model 


     for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? 

      if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) { 
          $ok = false; 

       continue; 
        } 

     } 
      if ($ok === true) $ret .= $str[$i]; 

    } 

    return $ret; 

} 

所以你可以使用它像這樣:

$str = "New Era Miami Dolphins NFL® 9FIFTY� Solid Snap Mi"; 
echo remove_none_utf8($str);