2017-08-25 36 views
1

我想解碼一些特殊字符在PHP中,似乎無法找到辦法做到這一點。解碼一些特殊字符的問題’ “ ”

$str = 'Thi’s i"s a’n e”xa“mple'; 

這只是返回一些點。

$str = preg_replace_callback("/(&#[0-9]+;)/", function($m) { 
    return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); 
}, $str); 

一些其他測試只是返回相同的字符串。

$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8'); 
$str = htmlspecialchars_decode($str, ENT_QUOTES); 

無論如何,我一直在嘗試各種組合,但真的不知道如何將其轉換爲UTF-8字符。

什麼,我期待看到這是:

Thi’s i"s a’n e」xa「mple 

而實際上,如果我採取這種直接使用htmlentities編碼它,我看到不同的角色開始。

Thi’s i"s a’n e”xa“mple 

不幸的是,我沒有對源代碼的控制,而且我被卡在處理這些字符。

它們是不是標準的,我需要用我自己的查找表手動替換它們嗎?

編輯

望着這桌的位置:https://brajeshwar.github.io/entities/

我看到我在尋找後未列出的字符。當我測試這個表中的幾個字符時,它們解碼得很好。我猜在PHP中的列表默認是不完整的?

+1

我得到預期的結果有三種方法.. 。 –

+0

html_entity_decode工作正常。你使用的是什麼版本的PHP?當你寫下「我期待看到的東西」是什麼意思? – gview

+0

'''不是unicode碼點146(U + 0092),而是U + 2019。即使它適合某個地方的某個人 - 這只是一個巧合,現在一般來說應該可以工作。 – zerkms

回答

2

如果你檢查你指的是字符的Unicode標準:http://www.unicode.org/charts/PDF/U0080.pdf

你會看到所有你的代碼點在字符串中沒有表示的字形,並且是控制字符。

這意味着它可以被渲染爲空的方塊(或點,這取決於您的渲染器如何對待它們)。

如果它適用於某個地方的人 - 這是一種非標準的行爲,不應該依賴它,因爲它是非標準的。

顯然,你有文本具有CP1250的初始編碼,所以你要麼應該相應地對待它,或手動重新編碼實體:

$str = 'Thi’s i"s a’n e”xa“mple'; 

$str = preg_replace_callback("/&#([0-9]+);/u", function($m) { 
    return iconv('cp1250', 'utf-8', chr($m[1])); 
}, $str); 

echo $str; 
+0

把原始字符串放在一個HTML文檔中,我會看到輸出OP在 – Phil

+0

@Phil之後,因爲它是以某種方式呈現某些應用程序並不意味着這些字符具有字形,瀏覽器可以原諒很多錯誤並嘗試做出幫助 – zerkms

+1

哦,我的意思是它沒有不要太那麼*「某人,某處」* – Phil