1

常に次のように保存されたレコード「فحصالرسالةالعربية」をphpに保存します。

فحص الرسالة العربية

これを取得するときにUTF-16BE文字に変換したいので、次を返す関数を使用しています。

002600230031003600300031003b002600230031003500380031003b002600230031003500380039003b0020002600230031003500370035003b002600230031003600300034003b002600230031003500380035003b002600230031003500380037003b002600230031003500370035003b002600230031003600300034003b002600230031003500370037003b0020002600230031003500370035003b002600230031003600300034003b002600230031003500390033003b002600230031003500380035003b002600230031003500370036003b002600230031003600310030003b002600230031003500370037003b

これは、データベースから取得した文字列を変換するために使用する関数です。

function convertCharsn($string) {
    $in = '';
    $out = iconv('UTF-8', 'UTF-16BE', $string);
    for($i=0; $i<strlen($out); $i++) {
      $in .= sprintf("%02X", ord($out[$i]));
    }
    return $in;
}

しかし、URLの下に同じ文字を入力すると、文字列と比較して異なる文字が表示されます。 http://www.routesms.com/downloads/onlineunicode.asp

戻る:

0641062D063500200627064406310633062706440629002006270644063906310628064A0629

上記のURLで変換されているので、文字列を変換したいと思います。私のデータベース照合はutf-8_general_ciです

4

1 に答える 1

2

基本的に、最初にHTMLエンティティからこれらの文字をデコードする必要があります。使用するだけhtml_entity_decode()

$rawChars = html_entity_decode($string, ENT_QUOTES | ENT_HTML401, 'UTF-8');

convertCharsn($rawChars);

それ以外の場合は、エンティティをエンコードしているだけです。&これは0026、UTF16の場合と同様に、#です0023。したがって、00260023投稿した上記のトランスコーディングの繰り返しシーケンスを確認できます。したがって、最初にデコードすると、設定する必要があります...

于 2012-05-01T13:08:58.507 に答える