Maison >développement back-end >Problème PHP >Comment utiliser php pour convertir Unicode et utf8 ?

Comment utiliser php pour convertir Unicode et utf8 ?

coldplay.xixi
coldplay.xixioriginal
2020-07-10 11:03:163295parcourir

Comment utiliser PHP pour convertir l'unicode et l'utf8 : Tout d'abord, il n'est pas nécessaire de considérer l'encodage [4-6] octets puis si des caractères [utf-8] de plus de quatre octets apparaissent, ils peuvent être directement considérés comme des caractères tronqués. Ignorez-le simplement ou convertissez-le sous forme d'entité Unicode, le code est [$utf8char = "{$c};"].

Comment utiliser php pour convertir Unicode et utf8 ?

Comment utiliser php pour convertir Unicode et utf8 :

L'encodage Unicode consiste à implémenter utf-8 et gb series La base de la conversion de l'encodage (gb2312, gbk, gb18030). Bien que nous puissions également faire directement un tableau de comparaison de utf-8 à ces encodages, peu de gens le feront car l'encodage variable de utf-8 est incertain. En général, le tableau de comparaison entre l'encodage Unicode et GB est utilisé. Unicode (UCS-2) est en fait l'encodage de base de utf-8, et utf-8 n'en est qu'une implémentation. Les deux ont la correspondance suivante :

.
  • La plage du symbole Unicode | Méthode d'encodage UTF -8

  • u0000 0000 007f

  • >u0000 0080 - u0000 07FF | 10xxxxxx

En raison des caractères actuellement utilisés par utf-8, ils sont tous en UCS-2, il n'est donc pas nécessaire de considérer l'encodage de 4 à 6 octets. De même, lors de la conversion inverse, si plus. plus de quatre octets de caractères UTF-8 apparaissent, ils peuvent être directement considérés comme des caractères tronqués. Ignorez ou convertissez-les en forme d'entité Unicode (forme "long int;"), puis transférez-le au navigateur ou au programme d'analyse associé pour traitement. L'algorithme de conversion de l'encodage Unicode en utf-8 à l'aide de PHP est le suivant :

/*
 * 参数 $c 是unicode字符编码的int类型数值,如果是用二进制读取的数据,在php中通常要用 hexdec(bin2hex( $bin_unichar )) 这样转换
 */
function uni2utf8( $c )
{
  if ($c < 0x80)
  {
        $utf8char = chr($c);
  }
  else if ($c < 0x800)
  {
        $utf8char = chr(0xC0 | $c >> 0x06).chr(0x80 | $c & 0x3F);
  }
  else if ($c < 0x10000)
  {
        $utf8char = chr(0xE0 | $c >> 0x0C).chr(0x80 | $c >> 0x06 & 0x3F).chr(0x80 | $c & 0x3F);
  }
  //因为UCS-2只有两字节,所以后面的情况是不可能出现的,这里只是说明unicode HTML实体编码的用法。
  else
  {
        $utf8char = "&#{$c};";
  }
  return $utf8char;
}

Dans le cadre de l'environnement actuel, on peut considérer que le jeu de caractères utf-8 == unicode (UCS-2). ), mais en théorie, la relation d'inclusion des relations du jeu de caractères principal est la suivante :

utf-8 > unicode(UCS-2) > gb18030 > gbk > gb2312

Par conséquent, si l'encodage Lorsque les deux sont corrects :

gb2312 => gbk => gb18030 => unicode(UCS-2) => utf-8

Un tel le processus de transformation est fondamentalement sans perte, mais au contraire, de

utf-8 => unicode(UCS-2) => gb18030=> gbk => gb2312

Dans un tel processus de conversion, il est très probable qu'il y ait des caractères méconnaissables. Par conséquent, si le système utilise UTF-. 8, essayez de ne pas inverser facilement l’opération d’encodage.

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn