Maison >développement back-end >tutoriel php >Partager une méthode d'implémentation de conversion d'Unicode en UTF-8 à l'aide de PHP

Partager une méthode d'implémentation de conversion d'Unicode en UTF-8 à l'aide de PHP

PHPz
PHPzoriginal
2017-03-05 14:30:171792parcourir

L'éditeur suivant vous proposera un article sur la façon d'utiliser PHP pour convertir Unicode en UTF-8 (recommandé) . L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un œil

Les exemples sont les suivants :

function unescape($str) {
  $str = rawurldecode($str);
  preg_match_all("/(?:%u.{4})|.{4};|\d+;|.+/U",$str,$r);
  $ar = $r[0];
  //print_r($ar);
  foreach($ar as $k=>$v) {
    if(substr($v,0,2) == "%u"){
      $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
 }
    elseif(substr($v,0,3) == ""){
      $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
 }
    elseif(substr($v,0,2) == "") {
       
      $ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
    }
  }
  return join("",$ar);
}
echo unescape("紫星蓝");

Des utilisateurs ont fait savoir aujourd'hui que les données soumises par les utilisateurs du système de formulaire seraient tronquées en chinois. Les tests ont révélé que le problème venait de la conversion iconv. La recherche

iconv('UCS-2',
'GBK',
'Chinese')
Google

a révélé que la raison en est que la méthode d'encodage UCS-2 sur le Le serveur Linux est différent de celui de Winodws Inconsistent.

Donc, je l'ai changé en

iconv('UCS-2BE',

'GBK',
'Chinese')
Essayez-le, le chinois est normal

Voici les règles tacites concernant l'encodage UCS-2 pour les deux plates-formes


Encodage UCS-2 :

1. UCS-2 n'est pas égal à UTF-16. UTF-16 encode chaque octet en utilisant la plage de caractères ASCII, tandis que UCS-2 peut encoder chaque octet au-delà de la plage de caractères ASCII. UCS-2 et UTF-16 occupent jusqu'à deux octets par caractère, mais leurs encodages sont différents.

2. Pour UCS-2, la valeur par défaut sous Windows est UCS-2LE. L'utilisation de MultibyteToWidechar (ou A2W) génère l'unicode UCS-2LE. Le Bloc-notes Windows peut enregistrer du texte au format UCS-2BE, ce qui équivaut à des couches de conversion supplémentaires.

3. Pour UCS-2, la valeur par défaut sous Linux est UCS-2BE. Utilisez iconv (spécifiez UCS-2) pour convertir et générer l'unicode UCS-2BE. Si vous convertissez UCS-2 depuis la plate-forme Windows, vous devez spécifier UCS-2LE.

4. Compte tenu des différentes compréhensions d'UCS-2 sur plusieurs plateformes telles que Windows et Linux (UCS-2LE, UCS-2BE). MS préconise que l'Unicode ait un indicateur de démarrage (UCS-2LE FFFE, UCS-2BE FEFF) pour indiquer que les caractères suivants sont Unicode et identifier le big-endian ou le small-endian. Par conséquent, si les données provenant de la plateforme Windows portent ce préfixe, pas de panique.

5. La sortie d'encodage Linux, telle que la sortie d'un fichier ou la sortie de printf, nécessite une correspondance d'encodage appropriée sur la console (si l'encodage ne correspond pas, c'est généralement le cas). compilé avec le programme Il existe plusieurs relations avec l'encodage à l'époque), et l'entrée de conversion de la console doit vérifier l'encodage actuel du système. Par exemple, si l'encodage actuel de la console est UTF-8, alors les éléments encodés en UTF-8 peuvent être affichés correctement, mais GBK ne peut pas de même, si l'encodage actuel est GBK, l'encodage GBK peut être affiché ; . Les systèmes ultérieurs devraient être mis à jour. Gestion plus intelligente d’un plus grand nombre de conversions. Cependant, via des terminaux tels que putty, vous devez toujours configurer la conversion d'encodage du terminal pour éliminer le problème des caractères tronqués.

La méthode d'implémentation ci-dessus (recommandée) pour convertir Unicode en UTF-8 à l'aide de PHP est tout le contenu partagé par l'éditeur. J'espère qu'elle pourra vous donner une référence, et j'espère également que vous prendrez en charge le site Web chinois php. .

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