2010-12-30 11 views
0

Ich muss Zeichen wie U(der lateinische Kleinbuchstabe G mit Cedilla) in die entsprechenden hexadezimierten UTF8 Bytes wie 0xC4 0xA3 (oder c4a3) konvertieren. Ich weiß, dass es eine Funktion (oder eine Kombination von Funktionen) gibt, die ich verwenden kann, um dies in PHP zu erreichen, aber ich kann nicht scheinen, es richtig zu machen.Konvertiere Unicode-Hexadezimalwert in Bytes mit PHP

+0

Ich denke, es könnte einfacher sein, Sie mit dieser Funktion zu helfen, wenn Sie zumindest seinen Namen erwähnt ... –

+0

Ich habe versucht, zu Chaos mit der hier bereitgestellten Code http://stackoverflow.com/ questions/2670039/php-utf-16-zu-utf-8hex-Konvertierung: mb_convert_encoding ('& #'. intval ($ u). ';', 'UTF-8', 'HTML-ENTITIES') ;, aber Trotz der Verwendung von bin2hex auf dem Ergebnis habe ich nicht die Bytes erhalten, die ich anstrebe – MarathonStudios

Antwort

1

Die Funktion in the answer you are linking to funktioniert gut, ist aber Sie müssen ein paar Dinge berücksichtigen:

  • Die Funktion erwartet eine Zahl (zB 0x0123) kein String ('U+0123')
  • Ihr Ausgang sein muss angezeigt als UTF-8
  • Sie kann Notwendigkeit mb_internal_encoding('UTF-8') (ich habe festgestellt, dass einige Systeme eine falsche Standard haben) zu nennen

Wie auch immer, habe ich eine kleine Variation geschrieben, die einen Unicode-Codepunkt für den Fall übernimmt, dass genau das, was Sie brauchen:

<?php 

header('Content-Type: text/plain; charset=utf-8'); 

mb_internal_encoding('UTF-8'); 

function unicode_code_point_to_char($code_point) { 
    if(preg_match('/^U\+(\d{4,6})$/', $code_point, $matches)){ 
     return mb_convert_encoding('&#' . hexdec($matches[0]) . ';', 'UTF-8', 'HTML-ENTITIES'); 
    }else{ 
     return NULL; 
    } 
} 

echo unicode_code_point_to_char('U+0123'); 

Update:

Ich habe gerade bemerkt habe, dass ich falsch verstanden haben Ihre Frage. Versuchen Sie folgendes:

function unicode_code_point_to_hex_string($code_point) { 
    if(preg_match('/^U\+(\d{4,6})$/', $code_point, $matches)){ 
     return bin2hex(mb_convert_encoding('&#' . hexdec($matches[0]) . ';', 'UTF-8', 'HTML-ENTITIES')); 
    }else{ 
     return NULL; 
    } 
} 
+0

Die zweite Funktion funktioniert wie ein Zauber, danke eine Million! – MarathonStudios

Verwandte Themen