php json_encode实现与中文乱码解决方法
php中文乱码的解决方法
php中文乱码的解决方法关于php中文乱码的解决方法php即可以在web页面上执行,又可以通过PHP CLI(命令行界面)在命令行执行PHP脚本。
一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,下面是店铺整理的关于php中文乱码的解决方法,欢迎来学习!一、PHP网页编码1. 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。
保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。
2. php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。
二、PHP与Mysql的数据交互中的编码PHP与数据库的编码应一致1. 修改mysql配置文件my.ini或f,mysql最好用utf8编码复制代码代码如下:[mysql]default-character-set=utf8[mysqld]default-character-set=utf8default-storage-engine=MyISAM在[mysqld]下加入:default-collation=utf8_bininit_connect='SET NAMES utf8′2. 在需要做数据库操作的php程序前加mysql_query(”set names ‘编码'”);,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是utf8,这样插入或检索数据时就不会出现乱码了三、PHP与操作系统相关Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数如果是utf-8编码会出现错误,比如move_uploaded_file()、filesize()、readfile()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in …Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move ” to ” in …Warning: filesize() [function.filesize]: stat failed for … in …Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..在Linux环境下用gb2312编码虽然不会出现这些错误,但保存后的文件名出现乱码导致无法读取文件,这时可先将参数转换成操作系统识别的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的`上传、下载。
PHP中文乱码解决总结
关于PHP和MySQL出现乱码的解决办法最近几天一直在做贴吧的小项目,跟着十八老师的视频学着,中间也遇到不少问题,我查了不少资料最后都一一解决了。
下面详细分类说明各种乱码的处理方法。
简单地讲乱码的产生和各个环节里面设置的编码类型不匹配有关,这里的乱码主要都是指的中文显示的乱码。
(下面没有特指都是说中文显示乱码)。
我先根据发生乱码的位置来划分。
如果是需要快速查找解决方法的可以直接根据错误位置来查阅本文(根据编号快速查找)。
1.网页显示中文乱码。
2.PHPmyadmin中显示乱码。
3.控制台显示中文乱码。
如果是想详细了解各种情况的童鞋可以耐心阅读本文。
1.第一种在一般网页页面上显示中文出现乱码。
这个主要要改一下页面显示编码设置,如果是PHP文件,则在其中加上一句:header("Content-Type: text/html; charset=utf-8");并且要注意保存PHP文件的时候选择编码为utf8.如图所示在你需要显示的PHP后缀的页面中加上就可以,当然一般来说如果是比较多页面都要设置,一个个去添加很麻烦,就在初始化文件里面最后添加就可以加载到所有需要的文件了。
如果是静态页面(求别喷,很可能有静态页面的说),在页面<head></head>标签之间加上一句:<meta charset="utf-8">。
改完后页面的显示中文就能正常。
Utf8编码格式和gbk格式都是目前中文网站显示所用的编码,所以将charset改为utf即可。
2.第二种在MySQL图形化界面中文数据的显示。
在如PHPmyadmin里面也有可能出现中文乱码。
前面也说了要把PHP文件编码保存为utf8,所以相对应的MySQL的相关字符集的设置也要改成utf8;这里有几种方式可以供选择。
第一种治标不治本。
在需要进行数据库操作的PHP文件里,加上下面几句:mysql_query('set character_set_client = utf8');//设置client的字符集为utf8mysql_query('set character_set_connection = GBK');//s设置连接字符集为gbkmysql_query('set character_set_results = utf8');//设置最后结果的字符集为utf8当然作为程序员来说,如果一个添加留言的页面需要录入中文,一个修改留言的页面也需要中文的录入数据库,每个文件里都必须加,一个个写也是很烦躁的事,建议还是写到初始化文件(比如我写的init.php)里面,其他文件都会自行加载。
php乱码解决方案
php乱码解决方案《PHP乱码解决方案》在使用PHP进行开发时,经常会遇到乱码的问题。
乱码可能会导致网页显示不正常,影响用户体验。
那么,如何解决PHP乱码问题呢?下面介绍一些常见的解决方案。
1. 确保编码一致在PHP文件开头添加如下代码,指定文件编码格式:```phpheader("Content-type: text/html; charset=utf-8");```这样可以确保输出的内容使用UTF-8编码,可以有效避免乱码问题。
2. 数据库连接设置在连接数据库时,应该设置连接字符集为UTF-8:```phpmysqli_set_charset($con, "utf8");```这样可以确保从数据库获取的数据也是UTF-8编码的,避免乱码问题。
3. 处理中文字符在PHP代码中处理中文字符时,应该使用相关的函数进行处理,比如使用`mb_convert_encoding`函数进行编码转换。
4. 使用HTML meta标签在HTML页面的head标签中添加如下meta标签:```html<meta charset="UTF-8">```这样可以告诉浏览器页面的编码格式,确保页面正常显示。
5. 检查服务器设置在一些情况下,乱码可能是由于服务器的配置问题导致的。
可以检查服务器的默认编码设置,确保与项目所需的编码一致。
总结:PHP乱码问题可能会因多种原因导致,但通过以上一些常见的解决方案,可以有效避免乱码问题的发生。
在开发过程中,应该注意统一编码格式,并且使用相关的函数和方法进行编码转换,确保输出内容的准确性和美观性。
php json_decode失败的几种处理方式
PHP中使用json_decode函数解析JSON字符串时,有时会遇到解析失败的情况。
这可能是由于多种原因造成的,包括JSON字符串格式不正确、编码问题、内存限制等。
对于这些解析失败的情况,我们需要采取相应的处理方式来解决问题,确保程序的正常运行。
本文将针对json_decode失败的情况,介绍几种处理方式,帮助读者更好地应对这一问题。
一、检查JSON字符串格式当使用json_decode解析JSON字符串失败时,我们需要检查JSON 字符串的格式是否符合标准的JSON格式。
JSON字符串应该使用双引号包围字符串值,而不是单引号。
另外,JSON字符串的键名也必须使用双引号包围。
如果JSON字符串格式不正确,就会导致json_decode解析失败。
我们需要通过工具或手动检查JSON字符串的格式,确保其符合标准的JSON格式。
二、处理编码问题另一个常见的导致json_decode解析失败的原因是编码问题。
如果JSON字符串包含了非标准的字符编码,就可能导致解析失败。
为了解决这一问题,我们可以尝试使用iconv或mb_convert_encoding等函数对JSON字符串进行编码转换,将其转换为UTF-8编码,然后再进行解析。
这样可以避免编码问题导致的解析失败。
三、调整内存限制在PHP中,解析大型JSON字符串时,有时会因为内存限制导致json_decode失败。
为了解决这一问题,我们可以通过ini_set函数或php.ini配置文件来调整PHP的内存限制。
将memory_limit设置为较大的值,可以帮助解析大型JSON字符串,降低解析失败的可能性。
但需要注意的是,过大的内存限制可能会影响服务器的性能,因此需要根据实际情况进行调整。
四、使用第三方库除了使用PHP内置的json_decode函数,我们还可以考虑使用第三方的JSON解析库来解析JSON字符串。
可以使用JSON模块、YAJL 等库来代替PHP的json_decode函数。
PHPjson_encode()函数详解及中文乱码问题
PHPjson_encode()函数详解及中⽂乱码问题在 php 中使⽤ json_encode() 内置函数(php > 5.2)可以使⽤得 php 中数据可以与其它语⾔很好的传递并且使⽤它。
这个函数的功能是将数值转换成json数据存储格式。
<?php$arr = array('Name'=>'希亚','Age'=>);$jsonencode = json_encode($arr);echo $jsonencode;>程序运⾏结果如下:{"Name":null,"Age":}json_encode 函数中中⽂被编码成 null 了,Google 了⼀下,很简单,为了与前端紧密结合,Json 只⽀持 utf- 编码,我认为是前端的 Javascript 也是 utf- 的原因。
<?php$array = array('title'=>iconv('gb','utf-','这⾥是中⽂标题'),'body'=>'abcd...');echo json_encode($array);>这个程序的运⾏结果为:{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}数组中所有中⽂在json_encode之后都不见了或者出现\u2353等。
解决⽅法是⽤urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都⽤urlencode()处理⼀下,然⽤json_encode()转换成json字符串,最后再⽤urldecode()将编码过的中⽂转回来。
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决⽅案PHP5.4才⽀持JSON_UNESCAPED_UNICODE这个参数,此参数是让中⽂字符在json_encode的时候不⽤转义,减少数据传输量。
但在PHP5.3中,就得⾃⼰写个函数来实现,以下就是解决⽅法:/*** 对变量进⾏ JSON 编码* @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据* @return string 返回 value 值的 JSON 形式*/function json_encode_ex($value){if (version_compare(PHP_VERSION,'5.4.0','<')){$str = json_encode($value);$str = preg_replace_callback("#\\\u([0-9a-f]{4})#i",function($matchs){return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));},$str);return $str;}else{return json_encode($value, JSON_UNESCAPED_UNICODE);}}判断PHP的版本,如果低于5.4则使⽤⾃定义函数来实现,如果是5.4及以上版本则使⽤JSON_UNESCAPED_UNICODE。
以上就是php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决⽅案,希望能给⼤家⼀个参考,了解更多PHP的语法,⼤家可以关注《》,也希望⼤家多多⽀持。
json_encode中文转义错误的处理方法
json_encode中文转义错误的处理方法JSON(JavaScript Object Notation)是一种用于数据交换的轻量级数据格式,它以易于理解和生成的方式表示结构化数据。
在使用JSON编码中文时,可能会遇到转义错误的问题,即中文字符没有正确转义,导致无法正确解析和处理。
解决这个问题的方法有以下几种:1.使用JSON_UNESCAPED_UNICODE选项在PHP的json_encode函数中,有一个JSON_UNESCAPED_UNICODE选项可以用来解决中文转义错误的问题。
该选项可以使json_encode函数在编码时不对中文字符进行Unicode转义,而直接输出中文字符。
例如:```$data = array('name' => '张三');$json = json_encode($data, JSON_UNESCAPED_UNICODE);echo $json;```这样就可以正确输出中文字符。
2.使用双重编码另一种解决方法是使用双重编码。
先将中文字符进行URL编码,然后再使用json_encode进行编码。
例如:```$data = array('name' => urlencode('张三'));$json = json_encode($data);echo urldecode($json);```这样可以确保中文字符被正确编码和解码。
3.使用自定义函数如果以上方法无法解决问题,可以考虑使用自定义函数来手动处理中文转义错误。
例如:```function json_encode_cn($data)$json = json_encode($data);$json = preg_replace_callback('/\\\\u(\w{4})/',function($matches)return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UCS-2BE');}, $json);return $json;$data = array('name' => '张三');$json = json_encode_cn($data);echo $json;```这个自定义函数会通过正则表达式来匹配Unicode转义字符,并将其转换为对应的中文字符。
php json_decode 编码
php json_decode 编码(原创版)目录1.PHP 中的 JSON_DECODE 函数2.JSON_DECODE 函数的作用3.JSON_DECODE 函数的使用方法4.JSON_DECODE 函数的编码问题正文1.PHP 中的 JSON_DECODE 函数在 PHP 中,JSON_DECODE 函数是一个非常实用的函数,它可以将JSON 编码的字符串解码为 PHP 数组。
这对于处理从客户端发送过来的JSON 数据,或者解析 JSON 文件等场景非常有帮助。
2.JSON_DECODE 函数的作用JSON_DECODE 函数的作用是将 JSON 编码的字符串转换为 PHP 数组。
这样,我们可以更方便地操作和处理这些数据。
例如,我们可以遍历数组,查找特定的值,或者对数组中的值进行计算等。
3.JSON_DECODE 函数的使用方法JSON_DECODE 函数的使用方法非常简单。
只需要将 JSON 编码的字符串作为参数传递给该函数即可。
如果解码成功,函数将返回一个对应的PHP 数组;如果解码失败,函数将返回一个布尔值,表示解码失败。
例如,我们有一个 JSON 编码的字符串:"{"name":"张三","age":25}",可以使用 JSON_DECODE 函数将其解码为 PHP 数组:```php$json_string = "{"name":"张三","age":25}";$decoded_array = json_decode($json_string);```4.JSON_DECODE 函数的编码问题在使用 JSON_DECODE 函数时,可能会遇到编码问题。
因为 JSON 数据可能是由不同的字符编码方式生成的,例如 UTF-8、GBK 等。
基于php解决json_encode中文UNICODE转码问题
基于php解决json_encode中⽂UNICODE转码问题⽤PHP的json_encode来处理中⽂的时候, 中⽂都会被编码, 变成不可读的, 类似”\u***”的格式,如果想汉字不进⾏转码,这⾥提供三种⽅法1.升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了⼀个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.<?phpecho json_encode("中⽂", JSON_UNESCAPED_UNICODE);//"中⽂"2.把汉字先urlencode然后再使⽤json_encode,json_encode之后再次使⽤urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。
$array = array('test'=>urlencode("我是测试"));$array = json_encode($array);echo urldecode($array);//{"test":"我是测试"}3.对unicode码再进⾏解码,解码函数如下:function decodeUnicode($str){return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',create_function('$matches','return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'),$str);}4.例⼦$arr = array('name1':"中⽂",'name2':'abc12');$jsonstr = decodeUnicode(json_encode($arr));以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
php处理json时中文问题的解决方法
php处理json时中文问题的解决方法php处理json时中文问题的解决方法在项目里面用到json操作,之前测试都是很正常的,但有时候把对象转换成json的时候,其中有个中文属性变成了null.遇到这种情况怎么办呢?下面店铺为大家整理了php处理json时中文问题的解决方法,希望能帮到大家!操作的代码如下:复制代码代码如下:$usr = new User();echo json_encode($usr);>很简单的代码,无中文情况一切正常,输出如下:{"PlatformID":"123213","UserID":"1023"}一旦有中文的时候会出现两种情况。
第一种情况是对象本身的某个值为中文的`属性是utf-8编码,则会有如下输出:{"PlatformID":"123213","UserID":"1023","UserName":"u00b7 u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"} 其中的UserName是非人类语言,这个是正常的,如果我们用firebug看下就是中文的。
(这个纠结了我半天)第二种情况是非utf-8编码,输出会变成null:{"PlatformID":"123213","UserID":"1023","UserName":null}很奇怪,查了手册后知道json_encode是只对utf-8有效,其它编码均会变为null.下面就开始解决编码转化的问题。
在上看到别人的函数如下:复制代码代码如下:private function to_utf8($in){if (is_array($in)) {foreach ($in as $key => $value){$out[$this->to_utf8($key)] = $this->to_utf8($value);}}elseif(is_string($in)){if(mb_detect_encoding($in) != "UTF-8")return utf8_encode($in);elsereturn $in;}else{return $in;}return $out;}于是拿下来转换编码发现已经不为null.欣喜之下用firebug打开,发现并不是我原来的中文字符....开始纠结......难道是要让他转换成原来的编码?回去寻找原始编码......测试开始:1.把$usr->UserName直接输出,页面头设置charset=utf-8.乱码2.echo json_encode($usr)输出UserName=null3.页面头设置为charset=gbk,输出正确->可以确定原编码为gbk最后通过IE,Chrome,Firefox测试得出结论:1.保证页面字符集与数据库一致,输出一定正常。
json_encode中文解决方法
json_encode中⽂解决⽅法json 是⼀个很好的数据结构现在已经⼴泛⽤在⽹络数据传输上php ⾃⾝待了两个和json 相关的函数json_encode 和 json_decode这两个函数的具体⽤法⽹上有很多相关的⽂章本⽂主要介绍⽤json_encode 时中⽂⽆法转换的解决⽅案本⽂假设⽂件所⽤的编码为gb2312;先写出所需的数组<?php$json = array (0 =>array ('id' => '13','name' => '乒乓球',),1 =>array ('id' => '17','name' => '篮球',))>如果直接⽤函数json_encode<?phpecho json_encode($json);>结果为:<?php[{"id":"13","name":null},{"id":"13","name":null}]>可以看到汉字没有被转义都为null这是因为json仅仅转义encoding编码故上⾯语句应该先转换编码<?phpforeach ($ajax as $key=>$val){$ajax[$key]['name'] = urlencode($val['name']);}echo json_encode($json);>客户端js代码<script type="text/javascript">function getsort(obj){$.ajax({type : "GET",url : "<?=$this->baseUrl?>/index/getajax",data : "c=" obj.value,success : function(json){var json=eval(json);var html = '<select>';$.each(json, function(k){html = '<option value="' json[k]['id'] '">' decodeURI(json[k]['name']) '</option>'; });html ="</select>";$('#sort').html(html);}})}</script>⽤上⾯的代码js会报错说编码不符合标准原因是因为js 中decodeURI 仅仅⽀持utf8 转码所以php代码应该为下⾯的代码<?phpforeach ($ajax as $key=>$val){$ajax[$key]['name'] = urlencode(iconv('gb2312','utf-8',$val['name']));}echo json_encode($json);>。
探讨PHPJSON中文乱码的解决方法详解
探讨PHPJSON中⽂乱码的解决⽅法详解我们知道在使⽤Ajax技术与PHP后台交互时,中⽂乱码是常有的事,JSON作为与XML类似的数据交换格式,在PHP⽤来进⾏交互时也会出现中⽂乱码的情况,解决PHP JSON中⽂乱码的⽅法思路其实与PHP Ajax传值中⽂字符乱码的解决⽅法类似,下⾯我以教程形式详细介绍下解决PHP JSON中⽂乱码的⽅法。
由于JSON与JS⼀样,对于客户端的字符是以UTF8的形式处理,即JSON提交或接受返回的字符是以UTF8形式处理,当与PHP交互时,如果数据库编码、PHP页⾯编码不采⽤UTF8格式时,PHP与JSON交互时中⽂就会产⽣乱码。
在知道了PHP与JSON交互产⽣中⽂乱码的原因后解决的⽅法其实就简单很多。
最简答的解决PHP JSON中⽂乱码的⽅法就是保证数据库编码、PHP页⾯编码统⼀采⽤UTF8格式,对于PHP⼊门学习者来说建站时数据库最好使⽤UTF8格式,可减少不少⿇烦。
当PHP使⽤JSON与前台JS交互时,在使⽤json_encode函数之前需要使⽤urlencode函数进⾏URL编码,在JS客户端通过JS 函数decodeURI()进⾏URL解码后再读取中⽂信息。
注意:当在PHP页⾯中通过JSON进⾏交互,⽐如将数组转换成JSON格式时,⾸先请使⽤urlencode函数对数组key和value进⾏URL编码然后再使⽤json_encode函数和urldecode函数。
当由于各种原因,数据库编码、PHP页⾯编码不⼀致时,⽐如现有的数据库编码使⽤GB2312,这时在使⽤JSON交互时,就需要使⽤字符串编码转换函数进⾏字符集之间的转换。
常⽤的函数有iconv,由于iconv需要PHP配置环境⽀持,如果不⽀持,你可以通过⾃⾏编写gbk与UTF8编码转换函数实现编码转换。
⾄此,PHP JSON中⽂字符乱码的三种解决⽅法就介绍完了,其实在PHP开发中,遇到类似PHP与AJAX/JS进⾏交互,产⽣中⽂乱码时基本都是使⽤这些⽅法,思路是类似的。
phpjson_encode中提示的中文总是返回u767bu5f55u6210u529fu。。。
phpjson_encode中提⽰的中⽂总是返回u767bu5f55u6210u529fu。
最近在练习使⽤ php 写⼀些简单的接⼝,但是在返回的消息中,如果有中⽂,在测试后总是返回:{"resultCode":200,"message":"\u767b\u5f55\u6210\u529f\uff01","data":{"user_id":"29","user_phone":"139********","user_name":null,"user_sex":null,"user_password":"123456","user_header":null}}下⾯是我写的:$row = mysql_num_rows($result);if($row == 1){$array = array();while($row = mysql_fetch_array($result)){$array["user_id"] = $row["user_id"];$array["user_phone"] = $row["user_phone"];$array["user_name"] = $row["user_name"];$array["user_sex"] = $row["user_sex"];$array["user_password"] = $row["user_password"];$array["user_header"] = $row["user_header"];}//把上⾯的数组以 json 格式返回$json = json_encode(array("resultCode"=>200,"message"=>"登录成功!","data"=>$array));echo($json);}else{$json = json_encode(array("resultCode"=>500,"message"=>"登录失败!"));echo($json);}之前在测试时,⼀直显⽰这个个?通过⽹上查资料并交通,得知 php5.4 Json新增了⼀个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.我们只要在 json_encode(array(),JSON_UNESCAPED_UNICODE),就可以将代码中的中⽂正常输出:$json = json_encode(array("resultCode"=>200,"message"=>"登录成功!","data"=>$array),JSON_UNESCAPED_UNICODE);echo($json);看测试效果:就是这⼏个单词不好拼。
php如何解决中文乱码问题
php如何解决中文乱码问题php如何解决中文乱码问题很多新手朋友学习PHP的时候,发现程序中的中文在输出的时候会出现乱码的问题,那么为什么会出现这种乱码的情况呢?下面是店铺为大家带来的php如何解决中文乱码问题的知识,欢迎阅读。
I. 为什么会出现中文乱码?很多新手朋友学习PHP的时候,发现程序中的中文在输出的时候会出现乱码的.问题,那么为什么会出现这种乱码的情况呢?一般来说,乱码的出现有2种原因,一种是由于编码 (charset) 设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,第二种就是文件被以错误的编码打开,然后保存,比如一个文本文件原先是 GB2312 编码的,却以 UTF-8 编码打开再保存,就会出现乱码的问题。
本篇文章,就带大家了解一下,怎么解决php中乱码的问题。
我们将乱码情况分为以下几种,有需要的可以对照下面的几种情况有针对性的解决乱码问题第一种:解决HTML中中文乱码问题方法如果你的HTML 文件文件出现了乱码问题,那么你可以在head 标签里面加入UTF8编码(国际化编码):UTF-8 是没有国家的编码,也就是独立于任何一种语言,任何语言都可以使用的。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>示例我们现在的 HTML5 文件,设置编码更为简单,像下面这样第二种、HTML和PHP混合的页面解决方案如何是HTML 和PHP 混编,除了按照第一个方法所说的操作之外,还需要在 PHP 文件的最上面加入这句代码:<?phpheader("content-type:text/html;charset=utf-8"); //设置编码>第三种、纯PHP页面的中文乱码问题(数据是静态的)如果你的 PHP 页面出现了乱码,只需要在页面的开始处加入下面代码就可以了。
详解Python解决抓取内容乱码问题(decode和encode解码)
详解Python解决抓取内容乱码问题(decode和encode解码)⼀、乱码问题描述经常在爬⾍或者⼀些操作的时候,经常会出现中⽂乱码等问题,如下原因是源⽹页编码和爬取下来后的编码格式不⼀致⼆、利⽤encode与decode解决乱码问题字符串在Python内部的表⽰是unicode编码,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另⼀种编码。
decode的作⽤是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312'),表⽰将gb2312编码的字符串str1转换成unicode编码。
encode的作⽤是将unicode编码转换成其他编码的字符串,如str2.encode(‘utf-8'),表⽰将unicode编码的字符串str2转换成utf-8编码。
decode中写的就是想抓取的⽹页的编码,encode即⾃⼰想设置的编码代码如下#!/usr/bin/env python# -*- coding:utf-8 -*-# author: xulinjie time:2017/10/22import urllib2request=urllib2.Request(r'/')RES=urllib2.urlopen(request).read()RES = RES.decode('gb2312').encode('utf-8')//解决乱码wfile=open(r'./1.html',r'wb')wfile.write(RES)wfile.close()print RES或者#!/usr/bin/env python# -*- coding:utf-8 -*-# author: xulinjie time:2017/10/22import urllib2request=urllib2.Request(r'/')RES=urllib2.urlopen(request).read()RES=RES.decode('gb2312')RES=RES.encode('utf-8')wfile=open(r'./1.html',r'wb')wfile.write(RES)wfile.close()print RES但是还要注意:如果⼀个字符串已经是unicode了,再进⾏解码则将出错,因此通常要对其编码⽅式是否为unicode进⾏判断isinstance(s, unicode)#⽤来判断是否为unicode⽤⾮unicode编码形式的str来encode会报错所以最终可靠代码:#!/usr/bin/env python# -*- coding:utf-8 -*-# author: xulinjie time:2017/10/22import urllib2request=urllib2.Request(r'/')RES=urllib2.urlopen(request).read()if isinstance(RES, unicode):RES=RES.encode('utf-8')else:RES=RES.decode('gb2312').encode('utf-8')wfile=open(r'./1.html',r'wb')wfile.write(RES)wfile.close()print RES三、如何找到需要抓取的⽬标⽹页的编码格式1、查看⽹页源代码如果源代码中没有charset编码格式显⽰可以⽤下⾯的⽅法2、检查元素,查看Response Headers以上所述是⼩编给⼤家介绍的Python解决抓取内容乱码问题(decode和encode解码)详解整合,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案在PHP中,json_encode函数用于将数组或对象转换为JSON格式的字符串。
然而,默认情况下,json_encode函数会对非ASCII字符进行转义,以确保生成的JSON字符串是有效的。
这可能会导致一些问题,特别是当需要将Unicode字符以原样输出时,就需要使用JSON_UNESCAPED_UNICODE选项。
但是,并非所有的PHP版本都支持JSON_UNESCAPED_UNICODE选项。
如果你的PHP版本不支持该选项,你可以尝试以下解决方案来解决兼容性问题:1. 使用mb_convert_encoding函数:可以使用mb_convert_encoding函数将字符串从一个字符编码转换为另一个字符编码,然后再使用json_encode函数进行编码。
例如:```php$str = '你好';$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');$jsonStr = json_encode($str);```2. 自定义函数:你可以编写一个自定义函数来替代json_encode函数,该函数将使用htmlspecialchars函数来转义非ASCII字符。
例如:```phpfunction custom_json_encode($data)if (is_array($data) , is_object($data))$isList = is_array($data) && (empty($data) ,array_keys($data) === range(0, count($data) - 1));$json = [];foreach ($data as $key => $value)if ($isList)$json[] = custom_json_encode($value);} else$json[] = '"' . $key . '":' . custom_json_encode($value);}}$json = implode(',', $json);if ($isList)return '[' . $json . ']';} elsereturn '{' . $json . '}';}} elseif (is_string($data))return '"' . addslashes($data) . '"';} elseif (is_numeric($data))return $data;} elseif (is_bool($data))return $data ? 'true' : 'false';} elseif (is_null($data))return 'null';}$str = '你好';$jsonStr = custom_json_encode($str);```这些解决方案可以帮助你在PHP中处理JSON_UNESCAPED_UNICODE选项不兼容的问题。
Python字符串的encode与decode研究心得乱码问题解决方法
Python字符串的encode与decode研究⼼得乱码问题解决⽅法为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本⽂就来研究⼀下这个问题。
字符串在Python内部的表⽰是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另⼀种编码。
decode的作⽤是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表⽰将gb2312编码的字符串str1转换成unicode编码。
encode的作⽤是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表⽰将unicode编码的字符串str2转换成gb2312编码。
因此,转码的时候⼀定要先搞明⽩,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码代码中字符串的默认编码与代码⽂件本⾝的编码⼀致。
如:s='中⽂'如果是在utf8的⽂件中,该字符串就是utf8编码,如果是在gb2312的⽂件中,则其编码为gb2312。
这种情况下,要进⾏编码转换,都需要先⽤decode⽅法将其转换成unicode编码,再使⽤encode⽅法将其转换成其他编码。
通常,在没有指定特定的编码⽅式时,都是使⽤的系统默认编码创建的代码⽂件。
如果字符串是这样定义:s=u'中⽂'则该字符串的编码就被指定为unicode了,即python的内部编码,⽽与代码⽂件本⾝的编码⽆关。
因此,对于这种情况做编码转换,只需要直接使⽤encode⽅法将其转换成指定编码即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
php json_encode实现与中文乱码解决方法
php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。
这个函数的功能是将数值转换成json数据存储格式$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
//结果
//{"a":1,"b":2,"c":3,"d":4,"e":5}
/*
下面看一款json_encode中文乱码问题
解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下, 然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来
*/
function arrayrecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
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]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 将数组转换为json字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function json($array) {
arrayrecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
$array = array
(
'name'=>'希亚',
'age'=>20
);
echo json($array);
//应用实例
$servname="localhost";
$sqlservname="root";
$sqlservpws="123456";
$sqlname="lock1";
$db=mysql教程_connect($servname,$sqlservname,$sqlservpws) or die("数据库教程连接失败");
mysql_select_db($sqlname,$db);
$sql = "select * from t_operater";
$result =mysql_query($sql);
$rows = mysql_num_rows($result);
while($obj = mysql_fetch_object($result))
{
$arr[] = $obj;
}
echo '({"total":"'.$rows.'","results":'.json_encode($arr).'})';。