php 中解决json中文乱码的函数

 更新时间:2016年11月25日 17:40  点击:1550

php教程自带了json_encode来处理json数据,那么它们对中文的支持不好,下面我们来看个实例

echo json_encode(array(123213,'中国'));


{"platformid":"123213","userid":"1023","username":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}

我们会发现,英文可以正确解析,但中文就出来u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc哦,这可能是unicode编码,但我没测试过只是自己猜的。下面我们来看一款解决json中文乱码的函数

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);
else
return $in;
}
else
{
return $in;
}
return $out;
}

1.把$usr->username直接输出,页面头设置charset=utf-8.乱码
2.echo json_encode($usr)输出username=null
3.页面头设置为charset=gbk,输出正确->可以确定原编码为gbk
最后通过ie,chrome,firefox测试得出结论:


1.保证页面字符集与数据库教程一致,输出一定正常 。
2.做json_encode时保证数据编码是utf-8,json_decode正常。
3.如果要对非utf-8字符做json_encode,先转换成utf-8。
4.对非utf-8字符做json_decode的时候,千万不能忘记转换成原先的编码,否则会输出乱码!!

require()
require() 语句包括并运行指定文件。

require() 语句包括并运行指定文件。有关包括如何工作的详细信息见 include() 的文档。

require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在丢失文件时停止处理页面,那就别犹豫了,用 require() 吧。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的include_path。

例子 16-2. 基本的 require() 例子

<?php教程

require 'prepend.php';

require $somefile;

require ('somefile.txt');

?> 
 


更多例子参见 include() 文档。


注: 在 php 4.0.2 之前适用以下规则:require() 总是会尝试读取目标文件,即使它所在的行根本就不会执行。条件语句不会影响 require()。不过如果 require() 所在的行没有执行,则目标文件中的代码也不会执行。同样,循环结构也不影响 require() 的行为。尽管目标文件中包含的代码仍然是循环的主体,但 require() 本身只会运行一次。


注: 由于这是一个语言结构而非函数,因此它无法被“变量函数”调用。

include()
include() 语句包括并运行指定文件。

以下文档也适用于 require()。这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的 include_path。

当一个文件被包括时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。

例子 16-3. 基本的 include() 例子

vars.php

<?php

$color = 'green';
$fruit = 'apple';

?>

test.php
<?php

echo "a $color $fruit"; // a

include 'vars.php';

echo "a $color $fruit"; // a green apple

?> 

 


如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。

例子 16-4. 函数中的包括

<?php

function foo()
{
   global $color;

   include 'vars.php';

   echo "a $color $fruit";
}

/* vars.php is in the scope of foo() so    *
 * $fruit is not available outside of this  *
 * scope.  $color is because we declared it *
 * as global.                              */

foo();                    // a green apple
echo "a $color $fruit";  // a green

?> 
 


当一个文件被包括时,语法解析器在目标文件的开头脱离 php 模式并进入 html 模式,到文件结尾处恢复。由于此原因,目标文件中应被当作 php 代码执行的任何代码都必须被包括在有效的 php 起始和结束标记之中。

如果“url fopen wrappers”在 php 中被激活(默认配置),可以用 url(通过 http 或者其它支持的封装协议 - 所支持的协议见 附录 l)而不是本地文件来指定要被包括的文件。如果目标服务器将目标文件作为 php 代码解释,则可以用适用于 http get 的 url 请求字符串来向被包括的文件传递变量。严格的说这和包括一个文件并继承父文件的变量空间并不是一回事;该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果。


警告
windows 版本的 php 在 4.3.0 版之前不支持本函数的远程文件访问,即使 allow_url_fopen 选项已被激活。
 

例子 16-5. 通过 http 进行的 include()

<?php

/* this example assumes that www.111cn.net is configured to parse .php *
 * files and not .txt files. also, 'works' here means that the variables *
 * $foo and $bar are available within the included file.                */

// won't work; file.txt wasn't handled by www.example.com as php
include 'http://www.example.com/file.txt?foo=1&bar=2';

// won't work; looks for a file named 'file.php?foo=1&bar=2' on the
// local filesystem.
include 'file.php?foo=1&bar=2';

// works.
include 'http://www.example.com/file.php?foo=1&bar=2';

$foo = 1;
$bar = 2;
include 'file.txt';  // works.
include 'file.php';  // works.

?> 
 


相关信息参见使用远程文件,fopen() 和 file()。

因为 include() 和 require() 是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括号中)。

例子 16-6. include() 与条件语句组

<?php

// this is wrong and will not work as desired.
if ($condition)
   include $file;
else
   include $other;


// this is correct.
if ($condition) {
   include $file;
} else {
   include $other;
}

?> 
 


处理返回值:可以在被包括的文件中使用 return() 语句来终止该文件中程序的执行并返回调用它的脚本。同样也可以从被包括的文件中返回值。可以像普通函数一样获得 include 呼叫的返回值。


注: 在 php 3 中,除非是在函数中调用否则被包括的文件中不能出现 return。在此情况下 return() 作用于该函数而不是整个文件。


例子 16-7. include() 和 return() 语句

return.php

<?php

$var = 'php';

return $var;

?>

noreturn.php
<?php

$var = 'php';

?>

testreturns.php
<?php

$foo = include 'return.php';

echo $foo; // prints 'php'

$bar = include 'noreturn.php';

echo $bar; // prints 1

?> 

 


$bar 的值为 1 是因为 include 成功运行了。注意以上例子中的区别。第一个在被包括的文件中用了 return() 而另一个没有。其它几种把文件“包括”到变量的方法是用 fopen(),file() 或者 include() 连同输出控制函数一起使用。

注: 由于这是一个语言结构而非函数,因此它无法被“变量函数”调用。
require_once()
require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。有关此语句怎样工作参见 require() 的文档。

require_once() 应该用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

使用 require_once() 和 include_once() 的例子见最新的 php 源程序发行包中的 pear 代码。


注: require_once() 是 php 4.0.1pl2 中新加入的。

 

注: 要注意 require_once() 和 include_once() 在大小写不敏感的操作系统中(例如 windows)的行为可能不是你所期望的。 例子 16-8. require_once() 在 windows 下不区分大小写

<?php
require_once("a.php"); // this will include a.php
require_once("a.php"); // this will include a.php again on windows!
?> 


 

 


警告
windows 版本的 php 在 4.3.0 版之前不支持本函数的远程文件访问,即使 allow_url_fopen 选项已被激活。
 

include_once()
the include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。

include_once() 应该用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

使用 require_once() 和 include_once() 的更多例子见最新的 php 源程序发行包中的 pear 代码。


注: include_once() 是 php 4.0.1pl2 中新加入的。

 

注: 要注意 include_once() 和 require_once() 在大小写不敏感的操作系统中(例如 windows)的行为可能不是你所期望的。 例子 16-9. include_once() 在 windows 下不区分大小写

<?php
include_once("a.php"); // this will include a.php
include_once("a.php"); // this will include a.php again on windows!
?> 
 

 


警告
windows 版本的 php 在 4.3.0 版之前不支持本函数的远程文件访问,即使 allow_url_fopen 选项已被激活。
 

php教程 正则匹配unicode 编码正则方法,因为unicode编码的特殊性,所以一般的中文或英文正则是不能正确取到我们想要的内容的,下面来看一款专业的unicode正则表达式吧。

看个unicode编码图。

$words = "0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsruvwxyz!@#$%^&*()_+-=[],./{}|<>?'"你好啊我们";
$otherstr=preg_replace("//[x{0080}-x{00ff}]+/iu"," ",$words);
echo 'otherstr:',$otherstr;

php教程系统时区8小时差设置方法
修改php系统时区的两种方式:
1、修改php.ini文件中的设置,找到[date]下的“;date.timezone=”,将该项修改为date.timezone=asia/hong_kong (prc 中国时间),然后重新启动apache服务器。

2、在应用程序中,使用时间日期函数之前添加“date_default_timezone_set(“asia/hong_kong”)”函数

修改php.ini文件后获取本地时间:
php代码:
<?php
echo “现在是北京时间:”.date(“y-m-d h:i:s”).”<p>”;
?>
显示结果:
现在是北京时间:2010-11-30 20:50:03 (与本地时间相符)
php.ini修改后的代码:
[date]
; defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = prc

下面看看更多方法

1.在php.ini文件中修改设置。
[date]
   //defines the default timezone used by the date functions
   date.timezone = asia/shanghai
这里真是。。。可以设置shanghai,chongqin,hong_kong,taibei...等等,可就是没有找到beijing,不知道是什么原因。

2.在php程序中运行时设置。
<?php
    if(date_default_timezone_get() != "1asia/shanghai") date_default_timezone_set("asia/shanghai");
?>
注意:用"date_default_timezone_get"获得的时间设置中有一个1,也不太清楚是杂回事呢。

3.在使用时间时自己多加8*3600秒也是行滴。
<?php
    echo date("y-m-d h:i:s",time()+8*3600);
?>

注:
自php5.0开始,用php获取系统时间时,时间比当前时间少8个小时。原因是php.ini中没有设置timezone时,php是使用的utc时间,所以在中国时间要少8小时

 

装php教程扩展:windows 下的 memcache步骤

1.下载php的扩展dll:http://downloads.php.net/pierre/

2.将.dll放入php的扩展目录下面,一般在php目录中的ext 文件夹中。

3.修改apache目录下bin文件夹中的php.ini,加上extension=php_memcache.dll即可。

4.重启apache服务器,用phpinfo()查看,出现memcache说明配置正确.

值得注意的是:

 必须注意php的编译版本,下载memcache的时候注意要使用同样的编译版本;比如php是使用vc6编译的,那么memcache也应该使用vc6编译版本

下面来看一篇在windows下载安装memcache php教程吧

windows下的memcache安装:
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:memcachedmemcached.exe -d install’ 安装
3. 再输入: ‘c:memcachedmemcached.exe -d start’ 启动。note: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4.下载php_memcache.dll,请自己查找对应的php版本的文件
5. 在c:winntphp.ini 加入一行 ‘extension=php_memcache.dll’
6.重新启动apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!


memcached的基本设置:

-p 监听的端口
-l 连接的ip地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位mb。默认64mb
-m 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

memcache环境测试:
运行下面的php文件,如果有输出this is a test!,就表示环境搭建成功。开始领略memcache的魅力把!

< ?php
$mem = new memcache;
$mem->connect(”127.0.0.1′, 11211);
$mem->set(’key’, ‘this is a test!’, 0, 60);
$val = $mem->get(’key’);
echo $val;
?>
[!--infotagslink--]

相关文章

  • php生成二维码中文乱码问题解决方法

    最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15