2011-09-12 173 views
2

我得到的數據是這樣的:「ӘІҢҒҮКҚӨҺ」。 將此數據轉換爲此:d398d086d2a2d292d2aed2b0d29ad3a8d2ba 然後爲* .rtf格式添加「\'」:\'d3 \'8d \ '86 \'2a \'d2 \'2d \'ae \'2b \'d2 \廣告\ 'A8 \' 2Bstr_replace給出錯誤結果

,然後我得somethingl IKE在此:\ u1179 \ '3F \ U1240 \' 3F \ u1186 \'3F ...

但str_replace函數只替換斜槓Q_Q。

有什麼建議嗎?

這裏是全碼:

<? 
function strToHex($string) 
{ 
    $hex=''; 
    for ($i=0; $i < strlen($string); $i++) 
    { 
     $hex .= dechex(ord($string[$i])); 
    } 
    return $hex; 
} 

function extra($txt) { 
    $output_arr = array (
     // 
     "\\u1179\\'3f","\\u1240\\'3f","\\u1186\\'3f","\\u1170\\'3f","\\u1198\\'3f","\\u1200\\'3f","\\u1178\\'3f","\\u1256\\'3f","\\u1210\\'3f" 
    ); 

    $input_arr = array (
     // 
     "\\'d3\\'98","\\'d0\\'86","\\'d2\\'a2","\\'d2\\'92","\\'d2\\'ae","\\'d2\\'b0","\\'d2\\'9a","\\'d3\\'a8","\\'d2\\'ba" 
    ); 

    echo "<br>"; 
    echo "data: ".$txt."<br>"; 
    $txt = strtohex($txt); 
    echo "hex: ".$txt."<br>"; 
    for ($ii=0; $ii < strlen($txt); $ii++) { 
     // 
     if (strlen($tm1)<2) { 
      // 
      $tm1.=substr($txt,$ii,1); 
     } 
     else 
      { 
      // 
      $ret.="\\'".$tm1; 
      $tm1=''; 
     } 

    } 
    echo "RET:[".$ret."]<br>"; 
    $ret = str_replace($input_arr,$output_arr,$ret); 
    echo "RETREP:[".$ret."]<br>"; 
    return $ret; 
} 

extra("ӘІҢҒҮҰҚӨҺ"); 
?> 
+1

檢查http://stackoverflow.com/questions/1451144/php-multi-byte-str-replace – thwd

+0

@湯姆,沒有。這不適合我,這些信件是從MySQL數據庫中獲取的。他們在unicode(utf8)中。所以我試圖比較hexed值並用rtf spec格式替換它。 –

+1

mb_str_replace是你在找什麼 – ajreal

回答

0

由於「for」循環中的「if」邏輯,我得到了錯誤的結果。 這裏是正確的:

for ($ii=0; $ii < strlen($txt); $ii++) { 
    // 
    if (strlen($tm1)<2) { 
     // 
     $tm1.=substr($txt,$ii,1); 
    } 
    if (strlen($tm1)==2) { 
     // 
     $ret.="\\'".$tm1; 
     $tm1=''; 
    } 

} 

在舊版本(的問題),這件事情被跳過主字符串的每個字符三分之一。所以現在它工作正常。

0

我看不出有什麼直接的問題與您的代碼,比你爲榜樣使用字符串包含任何在$input_arr序列的事實等。我手動添加\'d3\'8d到該列表,並且替換工作正常,所以這可能是您的問題的來源。

您出現的UTF-8被轉換爲逃逸Unicode字符作爲\u{code}\'3f的ASCII碼錶示,所以你可能能夠利用the utf8tohtml function described in this comment,其轉義字符在&#{code};格式。

+0

我已經發現我的錯誤並解決了問題。 :)哦,並感謝utf8tohtml。 –