您的位置:

php字符编码转换问题(能否修改php的字符编码)

本文目录一览:

浅析PHP中的字符串编码转换(自动识别原编码)

本篇文章是对PHP中字符串编码转换的实现代码进行了详细的分析介绍,需要的朋友参考下

复制代码

代码如下:

/**

*

对数据进行编码转换

*

@param

array/string

$data

数组

*

@param

string

$output

转换后的编码

*/

function

array_iconv($data,$output

=

'utf-8')

{

$encode_arr

=

array('UTF-8','ASCII','GBK','GB2312','BIG5','JIS','eucjp-win','sjis-win','EUC-JP');

$encoded

=

mb_detect_encoding($data,

$encode_arr);//自动判断编码

if

(!is_array($data))

{

return

mb_convert_encoding($data,

$output,

$encoded);

}

else

{

foreach

($data

as

$key=$val)

{

if(is_array($val))

{

$data[$key]

=

array_iconv($val,

$input,

$output);

}

else

{

$data[$key]

=

mb_convert_encoding($data,

$output,

$encoded);

}

}

return

$data;

}

}

php 编码转换

URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu、Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URL。

URLEncode的方式一般有两种,一种是传统的基于GB2312的Encode(Baidu、Yisou等使用),另一种是基于UTF-8的Encode(Google、Yahoo等使用)。

本工具分别实现两种方式的Encode与Decode:

中文

-

GB2312的Encode

-

%D6%D0%CE%C4

中文

-

UTF-8的Encode

-

%E4%B8%AD%E6%96%87

我们可以用以下代码实现转换:

?php

echo

urlencode('测试');?

如果是gb2312编码,转换的结果为"%B2%E2%CA%D4";

如果是utf-8编码,转换的结果为"%E6%B5%8B%E8%AF%95";

希望我的回答你能满意啊!呵呵!

PHP字符编码转换

?php

header("Content-Type:text/html;charset=utf-8");

function hex2ch($str)

{

if(empty($str))

{

return '';

}

$new_str='';

for($i=0;$istrlen($str);$i++)

{

$new_str.=($i%2==0)?'%'.$str[$i]:$str[$i];

}

//echo($new_str);

unset($str);

return rawurldecode($new_str);

}

function ch2hex($str)

{

if(empty($str))

{

return '';

}

$str=rawurlencode($str);

return str_replace('%','',$str);

}

$str='中国';

$hex=ch2hex($str);

echo $hex;

$s=hex2ch($hex);

echo $s;

?

php中编码转换问题

function uc2html($str) {

$ret = ' ';

for( $i=0; $i strlen($str)/2; $i++ ) {

$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);

$ret .= iconv( "utf-8 ", "gb2312 ",u2utf8($charcode));

}

return $ret;

}

function u2utf8($c) {

$str= " ";

if ($c 0x80) {

$str.=$c;

} else if ($c 0x800) {

$str.=chr(0xC0 | $c 6);

$str.=chr(0x80 | $c 0x3F);

} else if ($c 0x10000) {

$str.=chr(0xE0 | $c 12);

$str.=chr(0x80 | $c 6 0x3F);

$str.=chr(0x80 | $c 0x3F);

} else if ($c 0x200000) {

$str.=chr(0xF0 | $c 18);

$str.=chr(0x80 | $c 12 0x3F);

$str.=chr(0x80 | $c 6 0x3F);

$str.=chr(0x80 | $c 0x3F);

}

return $str;

}

如果你不是smarty的话 试试这个 如果是smarty的话 用下面的方法

?php

/*

@Author: 蜗牛

@Blog:

@Note: 这个解决办法是基于上面那个地址提到的方法,解决了中英文截取长度时出现乱码的问题

*/

function smarty_modifier_truncate($string, $sublen = 80, $etc = '...', $break_words = false, $middle = false)

{

$start=0;

$code="UTF-8";

if($code == 'UTF-8')

{

//如果有中文则减去中文的个数

$cncount=cncount($string);

if($cncount($sublen/2))

{

$sublen=ceil($sublen/2);

}

else

{

$sublen=$sublen-$cncount;

}

$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";

preg_match_all($pa, $string, $t_string);

if(count($t_string[0]) - $start $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";

return join('', array_slice($t_string[0], $start, $sublen));

}

else

{

$start = $start*2;

$sublen = $sublen*2;

$strlen = strlen($string);

$tmpstr = '';

for($i=0; $i$strlen; $i++)

{

if($i=$start $i($start+$sublen))

{

if(ord(substr($string, $i, 1))129)

{

$tmpstr.= substr($string, $i, 2);

}

else

{

$tmpstr.= substr($string, $i, 1);

}

}

if(ord(substr($string, $i, 1))129) $i++;

}

if(strlen($tmpstr)$strlen ) $tmpstr.= "...";

return $tmpstr;

}

}

function cncount($str)

{

$len=strlen($str);

$cncount=0;

for($i=0;$i$len;$i++)

{

$temp_str=substr($str,$i,1);

if(ord($temp_str) 127)

{

$cncount++;

}

}

return ceil($cncount/3);

}

?

是可以的以上两种方法 site: