树欲静而风不止btpka3.blog.chinaunix.net
btpka3
全部博文(135)
2012年(29)
2011年(41)
2010年(26)
2009年(12)
2008年(9)
2007年(12)
2006年(6)
zhangdiv
hcu5555
jayflygo
韩仪ails
沐依静
jiangzhe
cheercho
shanggua
609854
lzyunv
格伯纳
yuanzh78
Otokaze
masterro
bcskydri
tyshan
wangyinh
oyjyb
分类:
2008-05-23 17:04:21
>PHP 文件 存储为 GBK 编码时: 1. 若 PHP 文件中包含了要输出到浏览器的中文等宽字符,则必须将其转码为 UTF-8 编码(使用 函数 iconv() 或 mb_convert_encoding()); 2. 若 PHP 文件中有要向 MySql 中插入、查询中文等宽字符, 1>. 先执行以下SQL: <1> set character_set_client = gbk; 指明也即php程序发往数据库的SQL语句使用的是GBK编码,如insert; <2> set character_set_connection = utf8; 指明数据库收到SQL语句之后应当将其从character_set_client转码为 utf8格式进行操作,如insert。(若没有这一句,插入的数据将变成问号) <3> set character_set_results = utf8; 指明数据库查询完毕之后应当以何种编码返回给调用端,如select。 >>PHP 文件 存储为 UTF-8 编码时 只需要在数据库操作前执行 set names 'utf8' 即可。 重要提示:如果要CMD.EXE下使用命令行工具mysql.exe手工操作数据库的话,需要先执行 SQL> set names gbk; 否则,php页面插入的中文会在命令行里显示乱码,命令行插入的中文会在php页面里 显示为乱码。 验证环境: Window XP, Eclipse 3.3.0 Xampp 1.6.4 (Mysql 5.0.45, Apache 2.2, PHP 5.2.4) my.ini 所有配置如下:(就压根没有配置过) [WinMySQLAdmin] Server=D:/Curriculum_Design/Eclipse/xampp/mysql/bin/mysqld-nt.exe QueryInterval=10 php.ini 中,(就没有配置过) default_charset 被注释掉,使用的是默认值; extension=php_mbstring.dll 开启,但是没有它的任何配置。 TestUtf8_gbk.php 文件编码:GBK 内容如下: */ //header("content-type:text/html;charset=utf-8"); //mb_internal_encoding('UTF-8'); echo ''; $mysqli = new mysqli('localhost', 'root', '123456', 'test'); //$mysqli->query("set names 'utf8'"); // C1 //$mysqli->query('SET CHARACTER SET utf8'); // C2 $mysqli->query("set character_set_client = gbk"); // D1 $mysqli->query("set character_set_results = utf8"); // D2 $mysqli->query("set character_set_connection = utf8"); // D3 print_db_characterSet($mysqli); //因为当前文件编码为GBK,而数据直接保存在PHP源代码中 //所以下面的编码测试显示为 CP936, //想IE查看编码为 UTF-8 时正确显示,需要转码 $data = "管理员"; $encodings = "UTF-8, GBK, ISO-8859-1"; $encoding = mb_detect_encoding($data, $encodings); echo ""; echo "DATA : {$data} "; echo "ENCODING : {$encoding} "; echo mb_convert_encoding("After GBK=>UTF-8 : $data ", "UTF-8", "GBK"); echo ""; $sqls = array(); $sqls[] = 'drop table if exists testutf8'; $sqls[] = 'create table if not exists testutf8(id nvarchar(32))'; //.' default character set "utf8"'; $sqls[] = 'insert into testutf8 (id) values ("'.$data.'")'; $sqls[] = 'select id from testutf8'; foreach ($sqls as $i => $sql ){ $result = $mysqli->query($sql); if (!$result){ echo "ERROR : \$sqls[\$i] : ".$mysqli->error." "; exit(); } if ($i == 1 && $result) { print_column_charset($mysqli, "test", "testutf8"); } if ($i == 3 && $result){ $row = $result->fetch_assoc(); $data = $row["id"]; $encoding = mb_detect_encoding($data, $encodings); echo ""; echo "DB DATA : {$data} "; echo "ENCODING : {$encoding}" ; echo ""; $result->close(); } } $mysqli->close(); function print_db_characterSet($mysqli){ //select COLUMN_NAME, CHARACTER_SET_NAME from information_schema.columns where TABLE_SCHEMA='test' and TABLE_NAME='t'; $sql = "SHOW VARIABLES LIKE 'character_set%'"; $result = $mysqli->query($sql); if(!$result){ echo "ERROR : ".$mysqli->error.""; return; } echo "SQL> {$sql}; "; echo " Variable_name" ." Value"; while($row = $result->fetch_array()){ echo "{$row[0]}$row[1]"; } echo ""; $result->close(); $sql = "SHOW VARIABLES LIKE 'collation%'"; $result = $mysqli->query($sql); if(!$result){ echo "ERROR : ".$mysqli->error.""; return; } echo "SQL> {$sql}; "; echo " Variable_name" ." Value"; while($row = $result->fetch_array()){ echo "{$row[0]}$row[1]"; } echo ""; $result->close(); } function print_column_charset($mysqli, $database_name, $table_name){ $sql = "select COLUMN_NAME, CHARACTER_SET_NAME " ."from information_schema.columns " ."where TABLE_SCHEMA='{$database_name}' and TABLE_NAME='{$table_name}'"; $result = $mysqli->query($sql); if(!$result){ //echo "ERROR : ".$mysqli->error." "; return; } echo "SQL> {$sql}; "; echo " COLUMN_NAME" ." CHARACTER_SET_NAME"; while($row = $result->fetch_array()){ echo "{$row[0]}$row[1]"; } echo ""; $result->close(); } ?>
上一篇: Flex 与 JavaScript 交互
下一篇:SWFLoader 载入 SWF 应用
登录 注册