2012-07-10 19 views
3

我有一個的到來給我一個字符串格式化像PHP GD imagettftext字符編碼,符號失蹤

Ciel Spa at SLSâ„¢ is a celestial dreamscape 

我有一個格式腳本,它改變

Ciel Spa at SLS™ is a celestial dreamscape 

該腳本更改編碼

return iconv("UTF-8", "ISO-8859-1//TRANSLIT//IGNORE", $str) 

上述iconv()通常會將商標符號作爲普通字符TM返回。這對我來說不起作用,所以我用一個字符串取代了符號,我可以在後面找到它。

str_replace("(TM)","™",$str); 

這當我在瀏覽器中查看源代碼的偉大工程,但是當我把這個文本imagettftext()的商標符號被忽略,有效地使串

Ciel Spa at SLS is a celestial dreamscape 

但當然作爲一個圖像呈現。

我知道商標符號在我使用的字體中受支持,但我不確定它爲什麼會消失。 mb_detect_encoding()返回null,而對於我的大多數字符串,它將返回UTF-8。

我已經準備好了一個堅韌不拔的骯髒的解決方法,因爲迄今爲止沒有任何工作。我嘗試使用html_entity_decode()和str_replace()的組合無濟於事。相同格式化腳本的早期版本組合了長陣列的UTF垃圾字符替換,而不更改字符串的編碼,然後將其提供給imagettftext(),並且看起來很好。我似乎無法得到回...任何想法?

+0

我可以有相關的代碼嗎? – Different55 2012-07-18 22:31:00

回答

0

iso-8859-1字符編碼中沒有簡單的商標符號。你沒有顯示任何東西的原因是因爲你正在用一個超出此字符集範圍的符號替換一個有效的iso-8859-1字符串的一部分。

你可能會使用

function decode_characters($info) 
{ 
    $info = mb_convert_encoding($info, "HTML-ENTITIES", "UTF-8"); 
    $info = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$info); 
    return($info); 
} 

代碼來自於PHP手冊頁一些快速研究試試你的UTF-8到ISO-8859-1編碼變化。