Maison > Article > développement back-end > Contenu lié à la classe de conversion de codage de caractères PHP
Classe de conversion d'encodage de caractères PHP, prend en charge ANSI, Unicode, Unicode big endian, UTF-8, UTF-8+Bom et la conversion mutuelle.
Quatre méthodes courantes d'encodage de fichiers texte
Encodage ANSI :
Aucun en-tête de fichier (octet de drapeau au début de l'encodage du fichier)
L'encodage ANSI alphanumérique occupe un octet, les caractères chinois occupent deux octets
Caractère de retour chariot et de saut de ligne, octet unique, représentation hexadécimale est 0d 0a
Codage UNICODE :
En-tête de fichier, représentation hexadécimale est FF FE
Chaque caractère est codé avec deux octets
Retour chariot et ligne caractère de flux, double octet, représentation hexadécimale est 000d 000a
Codage Unicode big endian :
La représentation hexadécimale de l'en-tête du fichier est FE FF
L'encodage suivant place le bit haut du caractère à l'avant et le bit bas à l'arrière, ce qui est exactement le même que l'encodage Unicode inversé
retour chariot et saut de ligne, double octets, représentation hexadécimale est 0d00 0a00
Codage UTF-8 :
En-tête de fichier, représentation hexadécimale est EF BB BF
UTF-8 est une longueur variable d'encodage de caractères Unicode, de chiffres, de lettres, de retour chariot et Les sauts de ligne sont tous représentés par un octet. Les caractères chinois occupent 3 octets
retour chariot et saut de ligne, un seul octet, représentation hexadécimale Pour 0d 0a
Principe de conversion : convertissez d'abord l'encodage de caractères en UTF-8, puis convertissez de UTF-8 en encodage de caractères correspondant.
CharsetConv.class.php
<?php /** 字符编码转换类, ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换 * Date: 2015-01-28 * Author: fdipzone * Ver: 1.0 * * Func: * public convert 转换 * private convToUtf8 把编码转为UTF-8编码 * private convFromUtf8 把UTF-8编码转换为输出编码 */ class CharsetConv{ // class start private $_in_charset = null; // 源编码 private $_out_charset = null; // 输出编码 private $_allow_charset = array('utf-8', 'utf-8bom', 'ansi', 'unicode', 'unicodebe'); /** 初始化 * @param String $in_charset 源编码 * @param String $out_charset 输出编码 */ public function __construct($in_charset, $out_charset){ $in_charset = strtolower($in_charset); $out_charset = strtolower($out_charset); // 检查源编码 if(in_array($in_charset, $this->_allow_charset)){ $this->_in_charset = $in_charset; } // 检查输出编码 if(in_array($out_charset, $this->_allow_charset)){ $this->_out_charset = $out_charset; } } /** 转换 * @param String $str 要转换的字符串 * @return String 转换后的字符串 */ public function convert($str){ $str = $this->convToUtf8($str); // 先转为utf8 $str = $this->convFromUtf8($str); // 从utf8转为对应的编码 return $str; } /** 把编码转为UTF-8编码 * @param String $str * @return String */ private function convToUtf8($str){ if($this->_in_charset=='utf-8'){ // 编码已经是utf-8,不用转 return $str; } switch($this->_in_charset){ case 'utf-8bom': $str = substr($str, 3); break; case 'ansi': $str = iconv('GBK', 'UTF-8//IGNORE', $str); break; case 'unicode': $str = iconv('UTF-16le', 'UTF-8//IGNORE', substr($str, 2)); break; case 'unicodebe': $str = iconv('UTF-16be', 'UTF-8//IGNORE', substr($str, 2)); break; default: break; } return $str; } /** 把UTF-8编码转换为输出编码 * @param String $str * @return String */ private function convFromUtf8($str){ if($this->_out_charset=='utf-8'){ // 输出编码已经是utf-8,不用转 return $str; } switch($this->_out_charset){ case 'utf-8bom': $str = "\xef\xbb\xbf".$str; break; case 'ansi': $str = iconv('UTF-8', 'GBK//IGNORE', $str); break; case 'unicode': $str = "\xff\xfe".iconv('UTF-8', 'UTF-16le//IGNORE', $str); break; case 'unicodebe': $str = "\xfe\xff".iconv('UTF-8', 'UTF-16be//IGNORE', $str); break; default: break; } return $str; } } // class end ?>
démo :unicode big endian vers utf-8+bom
afe612444d886363ae90ca7ae28be542convert($str); file_put_contents('response/utf-8bom.txt', $response, true); ?>
classe de conversion d'encodage de caractères php, prend en charge ANSI, Unicode, Unicode big endian, UTF-8, UTF-8+ Bom contenu lié à la conversion, veuillez faire attention au site Web chinois php pour plus de contenu connexe.
Recommandations associées :
Explication de la méthode de remplacement php str_replace pour des heures spécifiées
À propos de l'utilisation de header, headers_sent, headers_list, header_remove Description
La solution pour changer le type de champ entier renvoyé par MySQL via PDO en type String
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!