php汉字转码
① 如何正确运用php json_encode函数进行中文转换
在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。这个函数的功能是将数值转换成json数据存储格式,但是转换后的中文会变成Unicode编码。
[php] view plainprint?
<?php
$arr = array
(
'Name'=>'希亚',
'Age'=>20
);
$jsonencode = json_encode($arr);
echo $jsonencode;
?>
程序运行结果如下:
[php] view plainprint?
{"Name":null,"Age":20}
json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 javascript 也是 utf-8 的原因。
[php] view plainprint?
<?php
$array = array
(
'title'=>iconv('gb2312','utf-8','这里是中文标题'),
'body'=>'abcd...'
);
echo json_encode($array);
?>
这个程序的运行结果为:
[php] view plainprint?
{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}
数组中所有中文在json_encode之后都不见了或者出现\u2353等。解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。
[php] view plainprint?
<?php
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
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);
?>
这次成功了,运行结果如下:
[php] view plainprint?
{"Name":"希亚","Age":"20"}
② PHP 输出简单的中文 乱码问题
解决php中中文乱码问题方法
php文件本身的编码与网页的编码应匹配
a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加<metahttp-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。
b. 如果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8"),静态页面添加<metahttp-equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。
如果你的HTML文件文件出现了乱码问题,那么你可以在head标签里面加入UTF8编码(国际化编码):UTF-8是没有国家的编码,也就是独立于任何一种语言,任何语言都可以使用的。
(2)php汉字转码扩展阅读:
解决PHP 输出简单的中文 乱码问题的其他方法:
在php的echo前面加入header("Content-Type:text/html;charset=gb2312")
把<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />中的UTF-8改成gb2312
③ php中中文如何转码
应该是没有URL编码(一般来说,用默认字符集是没有问题的)。
URL编码/解码,可用函数urlencode()与urldecode()。
还有一个小问题,你有个地方打错了,在表单中把playerName打成了playerNmae,而iframe的URL中却是playerName。
iframe代码改为(你的拼写错误已修正):
<iframeid="aaa"name="aaa"width="600"height="500"src="网址/playerDetail.php?serverName=<?phpechourlencode($_GET["serverName"]);?>&playerName=<?phpechourlencode($_GET["playerName"]);?>"></iframe>
表单代码改为:
<formaction="22.php"method="get">
服务器:<inputtype="text"name="serverName"/><br/>
玩家名:<inputtype="text"name="playerName"/><br/>
<inputtype="submit"/>
</form>
再试试?
④ php搜索 繁体怎么转成简体
PHP实现---汉字简体繁体转换
这是以class包装好的简繁体转换的class,
另外需要两个table档:
1.http://www.jerry.com.tw/php/big5.map
2.http://www.jerry.com.tw/php/gb.map
程式如下:CCharset.php3
<?//=====================================================
//程式员:MagicJerry
//
//functionBig5_Gb($str)=>big5转GBforstring
//functionGb_Big5($str)=>GB转Big5forstring
//=====================================================
classCCharset{
var$gb_map="gb.map";//如果要放到别的路径,要加上完整路径
var$big5_map="big5.map";//例如="/home/table/gb.map
var$dep_char=127;
//-----------------------------------------------------------------
functioncbig5_gb($str,$fd){
$c=ord(substr($str,0,1));
$x=ord(substr($str,1,1));
$address=(($c-160)*510)+($x-1)*2;
fseek($fd,$address);
$hi=fgetc($fd);
$lo=fgetc($fd);
return"$hi$lo";
}
functioncgb_big5($str,$fd){
$c=ord(substr($str,0,1));
$x=ord(substr($str,1,1));
$address=(($c-160)*510)+($x-1)*2;
fseek($fd,$address);
$hi=fgetc($fd);
$lo=fgetc($fd);
return"$hi$lo";
}
//-----------------------------------------------------------------
functionBig5_Gb($str){
$fd=fopen($this->gb_map,"r");
$str=str_replace("charset=big5","charset=gb2312",$str);
$outstr="";
for($i=0;$i<strlen($str);$i++){
$ch=ord(substr($str,$i,1));
if($ch>$this->dep_char){
$outstr.=$this->cbig5_gb(substr($str,$i,2),$fd);
$i++;
}else{
$outstr.=substr($str,$i,1);
}
}
fclose($fd);
return$outstr;
}
//-----------------------------------------------------------------
functionGb_Big5($str){
$fd=fopen($this->big5_map,"r");
$str=str_replace("charset=gb2312","charset=big5",$str);
$outstr="";
for($i=0;$i<strlen($str);$i++){
$ch=ord(substr($str,$i,1));
if($ch>$this->dep_char){
$outstr.=$this->cgb_big5(substr($str,$i,2),$fd);
$i++;
}else{
$outstr.=substr($str,$i,1);
}
}
fclose($fd);
return$outstr;
}
}
?>
===================================================================
使用范例:
<?
//Designer:MagicJerry
//====直接转换文字串的使用方法========
include("CCharset.php3");
$obj=newCCharset;
$big5="这是一个big5的文字串";
$tgb=$obj->Big5_Gb($big5);
echo$tgb;//===>$tgb为转换好的gb码字串
$tbig5=$obj->Gb_Big5($tgb);
echo$tbig5;//又被转回来了:big5
//======================================
?>
<?
//如果直接转换网页或是档案
//语法http://your.domain.com.tw/这个程式.php3?http://要转码的网页url或档案
//example:转换奇摩首页
//http://your.domain.com.tw/这个程式.php3?http://www.kimo.com.tw/index.shtml
//注意:以下写法如遇到该网页有使用cookie,例如认证user,可能会被踢回,login错误..
//为什么?想想看吧...@_@
include("CCharset.php3");
$file=$QUERY_STRING;
$fcontents=join('',file("$file"));
$fcontents=str_replace("<head>","<head><basehref=$file>",$fcontents);
$code=newCCharset;
$gb=$code->Big5_Gb($fcontents);
echo$gb;
?>
范例:
<?
if($func=="charset"){
setcookie("CHAR_GB",$GB,time()+31536000);
$t=time();
$url="http://".$HTTP_HOST.$PHP_SELF."?".$QUERY_STRING;
$url=str_replace("?func=charset&GB=1","",$url);
$url=str_replace("?func=charset&GB=0","",$url);
$url=str_replace("&func=charset&GB=1","",$url);
$url=str_replace("&func=charset&GB=0","",$url);
//echo$url;
//echo"SETtoCharset=$CHAR_GB";
$t=time();
echo"
<scriptlanguage=javascript>
document.location='$url'
</script>
";
exit;
}
//phpinfo();
if($CHAR_GB==1&&!$istran){
include("CCharset.php3");
if(strlen($QUERY_STRING))$url="http://".$HTTP_HOST.$PHP_SELF."?".$QUERY_STRING."&istran=1";
else$url="http://".$HTTP_HOST.$PHP_SELF."?istran=1";
while(list($key,$val)=each($HTTP_COOKIE_VARS)){
//echo"$key=>$val<br>";
$url.="&".$key."=".urlencode($val);
}
$fcontents=join('',file("$url"));
$code=newCCharset;
$fcontents=$code->Big5_Gb($fcontents);
//echo"转换过的$CHAR_GB";
echo$fcontents;
exit;
}
/
⑤ php的url传递中文参数怎样转码
如果编码是UTF8的话 URL 中的中文会自动转化成 UTF8编码,同时解码时使用urldecode函数即可