2011-09-30 150 views
13

下面的代碼是否可以使用PHP進行轉換?如何將UTF8字符轉換爲PHP中的數字字符實體

下面的代碼是用JavaScript編寫的。它在需要時返回帶有數字字符引用的html。防爆。 smslån -> smslån

我一直沒有成功創建翻譯。 This script看起來像它可以工作,但對於å,而不是å如下的JavaScript並返回å

function toEntity() { 
    var aa = document.form.utf.value; 
    var bb = ''; 
    for(i=0; i<aa.length; i++) 
    { 
    if(aa.charCodeAt(i)>127) 
    { 
     bb += '&#' + aa.charCodeAt(i) + ';'; 
    } 
    else 
    { 
     bb += aa.charAt(i); 
    } 
    } 
    document.form.entity.value = bb; 
} 

PHP's ord function聽起來就像是做同樣的事情爲charCodeAt,但事實並非如此。我得到對於å使用ord和使用charCodeAt。這,或者我有一些難以置信的困難編碼問題。

+0

你的意思[呢?](http://www.php.net/manual/en/function.mb-encode-numericentity.php#88586),或phihag的答案下面,基本上?我沒有看到任何地方的ord的utf8版本。 – darkAsPitch

+0

我不確定。我試着用Miguel的代碼玩20分鐘,但看起來下面提到的phihag正是我所需要的。無論如何,就這個應用而言。有什麼理由相信它不是? – darkAsPitch

回答

32

使用mb_encode_numericentity

$convmap = array(0x80, 0xffff, 0, 0xffff); 
echo mb_encode_numericentity($utf8Str, $convmap, 'UTF-8'); 
+1

是的,當我想回答時,我看到你已經做到了,所以我注意到了。 ;)這對於這項工作來說確實是一個很酷的功能。 – hakre

+3

我唯一擔心的是$ convmap - 那究竟是什麼?手冊頁上沒有很好的解釋。我是否必須輸入所有可能的轉換或其他?我的軟弱頭腦把它當作「轉換地圖」。 – darkAsPitch

+6

@darkAsPitch這是混亂。 '$ convmap'指定要編碼的字符。它應該真的是一個回調函數,但這可能會很慢,並且在PHP中使用回調函數反而會影響函數。前兩個數字指定要轉換的字符代碼的範圍(包括),以及第三個和第四個偏移量以及一個位掩碼(0和0xfff用於所有實際用途)。例如,如果要將所有字符轉換爲HTML實體,請指定'array(0,0xfff,0,0xfff)'。基本上,'(0x80,0xffff,..)'等價於你的問題中的'charCode> 127'。 – phihag

相關問題