2010-08-17 23 views
2

J'ai certains caractères codés UTF-16 dans leur forme de paire de substitution. Je veux sortir ces paires de substitution en tant que caractères sur l'écran.Sortie UTF-16? Un peu coincé

Est-ce que quelqu'un sait comment cela est possible?

+1

http://stackoverflow.com/questions/3506120/unicode-surrogate-pairs-question Cela ressemble à un dup. –

Répondre

3

iconv('UTF-16', 'UTF-8', yourString)

1

Votre question est un peu claire.

Si vous avez un texte ASCII avec des séquences d'échappement UTF-16 intégré, vous pouvez convertir tout en UTF-8 de cette façon:

function unescape_utf16($string) { 
    /* go for possible surrogate pairs first */ 
    $string = preg_replace_callback(
     '/\\\\u(D[89ab][0-9a-f]{2})\\\\u(D[c-f][0-9a-f]{2})/i', 
     function ($matches) { 
      $d = pack("H*", $matches[1].$matches[2]); 
      return mb_convert_encoding($d, "UTF-8", "UTF-16BE"); 
     }, $string); 
    /* now the rest */ 
    $string = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 
     function ($matches) { 
      $d = pack("H*", $matches[1]); 
      return mb_convert_encoding($d, "UTF-8", "UTF-16BE"); 
     }, $string); 
    return $string; 
} 

$string = '\uD869\uDED6'; 
echo unescape_utf16($string); 

qui donne le caractère en UTF-8 (nécessite 4 octets car il est en dehors du BMP).

Si tout votre texte est UTF-16 (y compris les balises HTML, etc.), vous pouvez simplement indiquer au navigateur la sortie est en UTF-16:

header("Content-type: text/html; charset=UTF-16"); 

Ceci est très rare, car les scripts PHP ne peut pas être écrit en UTF-16 (à moins que PHP ne soit compilé avec un support multi-octets), ce qui rendrait l'impression de chaînes littérales gênante.

Ainsi, vous n'avez probablement qu'un morceau de texte en UTF-16 que vous voulez convertir en n'importe quel encodage que votre page Web utilise. Vous pouvez faire cette conversion avec:

//replace UTF-8 with your actual page encoding 
mb_convert_encoding($string, "UTF-8", "UTF-16");