在php中
1.首先必须编码统一,及页面、php代码、数据库编码格式是否一致
2.html中DW中点击“修改”->“页面属性”->“标题/编码”->选择一致的编码即可
3.在创建数据库时“mysql练级校对”->选择正确的编码,在数据中创建表时,字段凡是和字符串相关的全部设置号统一的编码格式
4.在php代码中,在连接数据库的代码之后写这么一句“mysql_query('SET NAMES UTF8');”
5.javascript乱码,在<script charset='utf-8'></script>,charset属性值必须要加的
以上几点仅供参考
ajax异步传输中的乱码问题
由于浏览器的不兼容性,在异步传输的过程中js代码XHR.open("POST","checkname.php?id="+username,true);将中文的值传递到checkname.php中时,中文显示乱码,并且在js中加charset=“utf-8”也不管用,查资料之后,有这样一种解决办法
在js中XHR.open("POST","checkname.php?id="+username,true);
改为:XHR.open("POST",encodeURI("checkname.php?id="+username),true);
在这就介绍一下:encodeURI
encodeURI() 函数可把字符串作为 URI 进行编码。
encodeURI(URIstring)
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#
document.write(encodeURI("http://www.w3school.com.cn")+ "<br />")
还有一种编码的函数:
escape(string)
已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
json不支持中文写入的问题解决
写两个函数,使其支持中文:
function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { foreach ($array as $key => $value) { if (is_array($value)) { arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } } function JSON($array) { arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); }
调用示例如下:
$guanggao_list=array( 0=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img01.taobaocdn.com/bao/uploaded/i1/13692019653157760/T1RedmXvBdXXXXXXXX_!!0-item_pic.jpg_310x310.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 1=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1372105283, "wangwang"=>"小鱼儿" ), 2=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 3=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 4=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 5=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 6=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 7=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 8=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" ), 9=>array( "iid"=>21341872612, "goods_name"=>"新款热销男装男士韩版修身裤休闲裤男裤 修身版休闲男装长裤子", "goods_list_img"=>"http://img03.taobaocdn.com/imgextra/i3/745475881/T20n1JXmVbXXXXXXXX_!!745475881.jpg_460x460.jpg", "url"=>"http://item.taobao.com/item.htm?spm=a230r.1.10.17.G7a5Tc&id=18937863889", "shichangjia"=>"359.00", "taobaojia"=>"199.00", "daoqi"=>1362105283, "wangwang"=>"芭菲雨" )); $str=JSON($guanggao_list); print_r($str);
php文档编码设置
a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
b. 如果欲使用utf-8编码,那么php要输出头 :header(“Content-Type: text/html; charset=utf-8"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的编码格式为utf-8。
最近需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些。 让我郁闷了好一会儿,去网上一查资料才知道这是iconv函数的一个bug。iconv在转换字符"―"到gb2312时会出错。解决方法很简单,就是在 需要转成的编码后加 "//IGNORE" 也就是iconv函数第二个参数后,如下:
iconv("UTF-8","GB2312//IGNORE",$data)
ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。
php中json在使用过程中的中文乱码问题解决
echo iconv("UTF-8","GB2312//IGNORE",$guanggao_list[$i]["goods_name"]) ;
忽视原来的编码问题,使用utf-8的编码格式
获取网页内容时的乱码问题
现在总结有两个原因:
1.编码问题。
解决:
<?php $url = "http://news.ef360.com/Articles/2013-3-8/299954.html"; $contents=file_get_contents($url); $contents=iconv("GBK", "UTF-8//IGNORE", $contents); echo $contents; ?>
2.目标页面开了Gzip
解决:@curl获取时
<?php function curl_get($url, $gzip=false){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); // 关键在这里 $content = curl_exec($curl); curl_close($curl); return $content; } ?>
@file_get_contents获取时
<?php file_get_contents("compress.".$url); ?>
php如何创建utf-8格式文件
一般php创建的文件默认不是utf-8格式的,在网上搜罗的解决办法如下:
<?php $f=fopen("test.txt", "wb"); $text=utf8_encode("a!"); //先用函数utf8_encode将所需写入的数据变成UTF编码格式。 $text="\xEF\xBB\xBF".$text; //"\xEF\xBB\xBF",这串字符不可缺少,生成的文件将成为UTF-8格式,否则依然是ANSI格式。 fputs($f, $text); //写入。 fclose($f); ?>
这样创建出的文件编码格式确实是utf-8,但是放在文件中的汉字出现了乱码的现象,经过一番调试,代码如下:
<?php $ctxtsubmit="好呀"; $f=fopen("../".$file, "wb"); //$text=utf8_encode($ctxtsubmit); //先用函数utf8_encode将所需写入的数据变成UTF编码格式。 $text="\xEF\xBB\xBF".$ctxtsubmit; //"\xEF\xBB\xBF",这串字符不可缺少,生成的文件将成为UTF-8格式,否则依然是ANSI格式。 fputs($f, $text); //写入。 fclose($f); ?>
至于"\xEF\xBB\xBF"为什么加这字符串,我也不明白