php 文字エンコード変換クラス は、ANSI、Unicode、Unicode ビッグ エンディアン、UTF-8、および UTF-8 Bom 変換をサポートします。
#4 つの一般的なテキスト ファイルのエンコード方法
ANSI エンコード:
ファイル ヘッダーなし (ファイル エンコードの先頭にある象徴的なバイト)
ANSI エンコードでは、英数字が 1 バイトを占め、中国語の文字が 2 バイトを占めます
キャリッジ リターンおよびライン フィード文字、シングル バイト、16 進表現は 0d 0a
UNICODE エンコード:
#ファイル ヘッダー、16 進表現は FF FE各文字は 2 バイトでエンコードされます
キャリッジ リターンおよび改行文字、ダブル バイト、16 進表現は 000d 000a
##Unicode ビッグ エンディアン エンコーディング:
16 進表現ファイル ヘッダーのファイル ヘッダーは FE FF
次のエンコーディングでは、文字の高位ビットが前に、低位ビットが後ろに配置されます。これは、Unicode エンコーディングを逆にしたものとまったく同じです
キャリッジ リターンとライン フィード文字、ダブル バイト、16 進表現は 0d00 0a00
UTF-8 エンコード:
ファイル ヘッダー、16 進表現は EF BB BF
UTF-8 は Unicode の可変長です 文字エンコーディング、数字、文字、キャリッジ リターン、漢字は 3 バイトで表現されます。
復帰と改行、1 バイト、16 進表現 0d 0a
# の変換原理##: まず文字エンコーディングを UTF-8 に変換し、次に UTF-8 から対応する文字エンコーディングに変換します。
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
?>
unicode ビッグ エンディアンから utf-8 bom<?php
require "CharsetConv.class.php";
$str = file_get_contents('source/unicodebe.txt');
$obj = new CharsetConv('unicodebe', 'utf-8bom');
$response = $obj->convert($str);
file_put_contents('response/utf-8bom.txt', $response, true);
?>
使用方法についてheader、headers_sent、headers_list、header_remove 説明
PDO を介して mysql によって返されるフィールドの整数型を文字列型に変更する解決策
以上がPHP文字エンコード変換クラス関連コンテンツの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。