2011-09-30 31 views
13

PHPを使用して以下のコードをすべて翻訳できますか?PHPでUTF8文字を数値エンティティに変換する方法

下記のコードはJavaScriptで書かれています。必要に応じてhtmlを数値文字参照で返します。 Ex。 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

わかりません。私はミゲルのコードを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でコールバックを使用すると、関数が先行することになります。最初の2つの数字は、変換する文字コードの範囲(3つを含む)と3番目と4番目とオフセットとビットマスク(すべての実用目的では0と0xfff)を指定します。たとえば、すべての文字をHTMLエンティティに変換する場合は、 'array(0、0xfff、0、0xfff)'を指定します。基本的に '(0x80、0xffff、..)'はあなたの質問の 'charCode> 127'と同じです。 – phihag

関連する問題