php escape 编码问题
来源:互联网 发布:打开软件必备组件 编辑:程序博客网 时间:2024/06/06 00:33
http://bbs.csdn.net/topics/190029120
- hfsross
- hfsross
- 等级:
- 结帖率:96.67%
楼主 发表于: 2007-10-06 18:26:01
比如URL发送一个get数据,如
aa.php?str=%20%B1%E0%C2%EB%CE%CA%CC%E2
在get回来之后
php是不会解码为中文的
请问如何把他解码为中文呢
还有js中的escape是否和php中有urlencode一样(应该不一样我试过了)
如何做到编码一致
另外,utf-8的js(escape)编码和gb2312的一样(我没调试过,好像不一样),我一开始是用gb2312后来改为utf-8因为数据库也用utf-8
在这里万分的感谢
例如
输出的结果不一样
aa.php?str=%20%B1%E0%C2%EB%CE%CA%CC%E2
在get回来之后
php是不会解码为中文的
请问如何把他解码为中文呢
还有js中的escape是否和php中有urlencode一样(应该不一样我试过了)
如何做到编码一致
另外,utf-8的js(escape)编码和gb2312的一样(我没调试过,好像不一样),我一开始是用gb2312后来改为utf-8因为数据库也用utf-8
在这里万分的感谢
例如
1
2
3
4
<
script
>document.write(escape('中国'));</
script
>
<
br
/>
<? echo(urlencode('中国')); ?><
br
/>
<? echo(urldecode('%u4E2D%u56FD')); ?>
输出的结果不一样
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
回复次数:10- hfsross
- hfsross
- 等级:
#1 得分:0回复于: 2007-10-07 10:36:26
顶上去
怎么没人知道呢
解决方法呢
怎么没人知道呢
解决方法呢
文思海辉第一届在线编程大赛
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- poonzsp
- poonzsp
- 等级:
#2 得分:5回复于: 2007-10-07 11:04:05
还有js中的escape是否和php中有urlencode一样
-----------------------------------------
是不一样的。
送你一个转换函数。
-----------------------------------------
function escape($str)
{
preg_match_all("/[\xc2-\xdf][\x80-\xbf]+|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}|[\x01-\x7f]+/e",$str,$r);
//匹配utf-8字符,
$str = $r[0];
$l = count($str);
for($i=0; $i<$l; $i++)
{
$value = ord($str[$i][0]);
if($value < 223)
{
$str[$i] = rawurlencode(utf8_decode($str[$i]));
//先将utf8编码转换为ISO-8859-1编码的单字节字符,urlencode单字节字符.
//utf8_decode()的作用相当于iconv("UTF-8","CP1252",$v)。
}
else
{
$str[$i] = "%u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
}
}
return join("",$str);
}
-----------------------------------------
是不一样的。
送你一个转换函数。
-----------------------------------------
function escape($str)
{
preg_match_all("/[\xc2-\xdf][\x80-\xbf]+|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}|[\x01-\x7f]+/e",$str,$r);
//匹配utf-8字符,
$str = $r[0];
$l = count($str);
for($i=0; $i<$l; $i++)
{
$value = ord($str[$i][0]);
if($value < 223)
{
$str[$i] = rawurlencode(utf8_decode($str[$i]));
//先将utf8编码转换为ISO-8859-1编码的单字节字符,urlencode单字节字符.
//utf8_decode()的作用相当于iconv("UTF-8","CP1252",$v)。
}
else
{
$str[$i] = "%u".strtoupper(bin2hex(iconv("UTF-8","UCS-2",$str[$i])));
}
}
return join("",$str);
}
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- hfsross
- hfsross
- 等级:
#3 得分:0回复于: 2007-10-07 21:17:32
解码呢?
unescape有没有?
unescape有没有?
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- sssky
- sssky
- 等级:
#4 得分:5回复于: 2007-10-08 11:24:02
我再送你一个,把下面作为php的一个函数,调用它就可以.编码为UTF-8
//php js_unescape correspond to js escape
function js_unescape($str)
{
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
if ($str[$i] == '%' && $str[$i+1] == 'u')
{
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%')
{
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
//php js_unescape correspond to js escape
function js_unescape($str)
{
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
if ($str[$i] == '%' && $str[$i+1] == 'u')
{
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%')
{
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- li36669957
- li36669957
- 等级:
#5 得分:10回复于: 2007-10-10 13:06:30
<?php
/*
*使用 PHP 解码 javascript escape() 编码过的字串为UTF-8
*例:1
*
*$tem=new UnEscape();
*echo $tem->getUtf8("%u624B%u673A%u95E8%u6237");
*echo $tem->getGb2312("%u624B%u673A%u95E8%u6237");
*/
function UnEscapeToUtf8($ar){
foreach($ar as $val){
$val = intval(substr($val,2),16);
if($val < 0x7F){ // 0000-007F
$c .= chr($val);
}elseif($val < 0x800) { // 0080-0800
$c .= chr(0xC0 | ($val / 64));
$c .= chr(0x80 | ($val % 64));
}else{ // 0800-FFFF
$c .= chr(0xE0 | (($val / 64) / 64));
$c .= chr(0x80 | (($val / 64) % 64));
$c .= chr(0x80 | ($val % 64));
}
}
return $c;
}
class UnEscape{
function getUtf8($value=""){
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",UnEscapeToUtf8,$value);
return urldecode($text);
}
function getGb2312($value=""){
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",UnEscapeToUtf8,$value);
$obj=new Gb2312Utf8();
return $obj->utf8ToGb2312(urldecode($text));
}
}
?>
方法getGb2312不能用,因为Gb2312Utf8太大这里没发
如要完整的可到我的空间下载utf8gb2312互转集成GB2312.txt 这个资源
http://download.csdn.net/user/li36669957
/*
*使用 PHP 解码 javascript escape() 编码过的字串为UTF-8
*例:1
*
*$tem=new UnEscape();
*echo $tem->getUtf8("%u624B%u673A%u95E8%u6237");
*echo $tem->getGb2312("%u624B%u673A%u95E8%u6237");
*/
function UnEscapeToUtf8($ar){
foreach($ar as $val){
$val = intval(substr($val,2),16);
if($val < 0x7F){ // 0000-007F
$c .= chr($val);
}elseif($val < 0x800) { // 0080-0800
$c .= chr(0xC0 | ($val / 64));
$c .= chr(0x80 | ($val % 64));
}else{ // 0800-FFFF
$c .= chr(0xE0 | (($val / 64) / 64));
$c .= chr(0x80 | (($val / 64) % 64));
$c .= chr(0x80 | ($val % 64));
}
}
return $c;
}
class UnEscape{
function getUtf8($value=""){
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",UnEscapeToUtf8,$value);
return urldecode($text);
}
function getGb2312($value=""){
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",UnEscapeToUtf8,$value);
$obj=new Gb2312Utf8();
return $obj->utf8ToGb2312(urldecode($text));
}
}
?>
方法getGb2312不能用,因为Gb2312Utf8太大这里没发
如要完整的可到我的空间下载utf8gb2312互转集成GB2312.txt 这个资源
http://download.csdn.net/user/li36669957
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- king2world
- king2world
- 等级:
#6 得分:0回复于: 2007-10-10 13:17:26
建议使用utf8编码, 然后使用javascript的encodeURIComponent函数
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- king2world
- king2world
- 等级:
#7 得分:0回复于: 2007-10-10 13:24:30
如果实在要用gb2312的话,也是使用encodeURIComponent, 这个函数会把js里边gb2312的内容转成utf8,然后urlencode编码,在php里边 urldecode以后 mb_convert_encoding转成gb2312就可以了
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- LastGame
- LastGame
- 等级:
#8 得分:0回复于: 2008-06-16 13:29:41
|||
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- LastGame
- LastGame
- 等级:
#9 得分:0回复于: 2008-06-16 13:30:21
||
对我有用[0]丢个板砖[0] 引用 | 举报 | 管理
- jayboy115519889
- jayboy115519889
- 等级:
#10 得分:0回复于: 2008-07-18 11:23:37
根本不一样两个函数的功能
0 0
- php escape 编码问题
- php escape URL 编码
- python unicode-escape编码问题
- python编码问题 decode('unicode-escape')
- 使用 PHP 解析 javascript escape() 编码过的字串
- javascript用escape编码后如何用php进行解码?
- PHP实现类似JAVASCRIPT中的escape()和unescape()编码.
- PHP解码js的escape编码的字符
- JS端 escape编码后 PHP端解码函数
- PHP解码js的escape编码的字符
- c#实现escape编码
- JavaScript escape() 函数编码
- uriencode escape 区别 编码
- php字符串编码问题
- PHP 字符集编码问题
- PHP字符集编码问题
- PHP的编码问题
- PHP 编码问题
- PHP问题:js中的encodeURIcomponent 函数在php如何实现?
- 单片机不起振原因分析(转)
- 在心中画一个太阳
- C# 剪切板
- html元素摇摆
- php escape 编码问题
- Google Author以及Google Structured Data,贴上你的照片到谷歌搜索结果
- java 格式化输出当前日期
- c++中的explicit
- svn经典工作流程实例模拟
- 20131208学习小结
- jQuery技巧总结
- RSA算法
- C语言位运算详解