2012-10-02 64 views
1

我使用imagettftext創建某些文本字符的圖像。爲此,我需要將一組十六進制字符代碼轉換爲它們的HTML等價物,我似乎無法找到任何內置於PHP的功能來執行此操作。我錯過了什麼? (通過搜索,我遇到了這個:PHP function imagettftext() and unicode,但它沒有一個答案似乎做我需要的 - 一些字符轉換,但大多數沒有)。PHP - 將十六進制字符轉換爲HTML實體

這裏是生成的HTML表示(瀏覽器)

[characters] => Array 
    (
     [33] => A 
     [34] => B 
     [35] => C 
     [36] => D 
     [37] => E 
     [38] => F 
     [39] => G 
     [40] => H 
     [41] => I 
     [42] => J 
     [43] => K 
     [44] => L 
    ) 

它來自這個數組(不能在imagettftext渲染):

[characters] => Array 
    (
     [33] => &#x41 
     [34] => &#x42 
     [35] => &#x43 
     [36] => &#x44 
     [37] => &#x45 
     [38] => &#x46 
     [39] => &#x47 
     [40] => &#x48 
     [41] => &#x49 
     [42] => &#x4a 
     [43] => &#x4b 
     [44] => &#x4c 
    ) 
+0

你可以使用[' html_entity_decode()'](http://php.net/html_entity_decode),如果你有像'A'這樣的正確的HTML轉義,而不是'&#x41',但自定義的'preg_replace'(_callback)也可以。 – mario

回答

4

基於a sample從PHP手冊中,你可以用正則表達式做到這一點:

$newText = preg_replace('/&#x([a-f0-9]+)/mei', 'chr(0x\\1)', $oldText); 

我不知道原始html_entity_decode()將工作你的情況,因爲你的數組元素缺少尾隨; - 這些實體的必要組成部分。

編輯,2015年7月:

針對本的評論注意到/e修改被棄用,這裏是如何使用preg_replace_callback()和匿名函數來寫:

$newText = preg_replace_callback(
    '/&#x([a-f0-9]+)/mi', 
    function ($m) { 
     return chr(hexdec($m[1])); 
    }, 
    $oldText 
); 
+0

它會工作,我已經在發佈我的答案之前測試過它。 –

+0

現在不推薦使用/ e修飾符,而是使用[preg_replace_callback](http://php.net/manual/en/function.preg-replace-callback.php)。 –

0

嗯,你顯然還沒有搜索有夠難。 html_entity_decode()

+0

如果您確實有尾隨,這是更好的選擇;在你的實體上。 –

相關問題