php解码escape
‘壹’ 求php高手:php 解密JS中的escape的代码
本例经过我测试没有问题.
<?
function utf8RawUrlDecode ($source) {
$decodedStr = "";
$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// we got a unicode character
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$unicode = hexdec ($unicodeHexVal);
$entity = "". $unicode . ';';
$decodedStr .= utf8_encode ($entity);
$pos += 4;
}
else {
// we have an escaped ascii character
$hexVal = substr ($source, $pos, 2);
$decodedStr .= chr (hexdec ($hexVal));
$pos += 2;
}
} else {
$decodedStr .= $charAt;
$pos++;
}
}
return $decodedStr;
}
$test = '%u884C%u4E1A%u5206%u6790';//js escape过的'行业分析';
echo utf8RawUrlDecode($test);
?>
‘贰’ 浏览器编码函数escape(),encodeURI(),encodeURIComponent()的区别
1、escape()
escape()是js编码函数中最古老的一个。实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“你好”的返回结果是"%u4F60%u597D"。无论网页的原始编码是什么,一旦被javascript编码,就都变为unicode字符。也就是说,Javascipt函数的输入和输出,默认都是Unicode字符。
2、encodeURI()
encodeURI是对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%,需要注意的是,它不对单引号’编码。
它对应的解码函数是decodeURI()。
3、encodeURIComponent()
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码,所以encodeURIComponent()相比encodeURI()要更加彻底。至于具体的编码方法,两者是一样。
它对应的解码函数是decodeURIComponent()。
‘叁’ escape(程式语言)详细资料大全
escape采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
基本介绍
- 中文名 :escape
- 作用 :进行编码
- 隶属 :计算机
- 类型 :代码
加密解密
escape的加密解密 在很多脚本语言的套用当中,escape函式是一个可转换编码的函式,比如javascript 的 ajax 中,向a.php传递参数?city=北京,可先将"北京"用escape重新编码,再进行传递,在服务器端接收后再解码才不会出现乱码。escape一般用于传递URL参数和类似urlencode base64_encode函式是类似的。如上?city=北京VB声明
Declare Function Escape Lib "gdi32" Alias "Escape" (ByVal hdc As Long, ByVal nEscape As Long, ByVal nCount As Long, ByVal lpInData As String, lpOutData As Any) As Long 说明 一个灵活的设备控制函式 返回值 escape函式 Long,对于QUERYESCSUPPORT,如支持指定的换码,则返回TRUE(非零);否则返回零。对于PASSTHROUGH,大于零值表示成功;如指定的换码不支持,则返回零;如果出错,则返回负值 参数表 参数 类型及说明 hdc Long,设备场景的句柄 nEscape Long,换码数量,由API32.TXT档案中的一个常数定义。这决定了具体的运作方式。请参考注解
nCount Long,lpInData缓冲区的大小,用位元组数表示 lpInData String,由换码类型决定。对于QUERYESCSUPPORT,这代表指向一个整数变数的指针,那个变数包含了要测试的换码值。对于PASSTHROUGH,这代表指向一个数据块的指针,那个数据块包含于要传送数据的头16位位元组数量中。数据块剩余的部分包含了要传送给印表机的实际数据缓冲区 lpOutData Any,指定一个输出缓冲区,它的具体使用由换码决定。它不由QUERYESCSUPPORT或PASSTHROUGH使用,而且应设为NULL(ByVal 0&) 注解 只有两个换码在Win32环境中经常用到。请用QUERYESCSUPPORT换码判断一个换码是否得到了驱动程式的支持。用PASSTHROUGH换码将原始数据直接发给一台印表机。其他换码在Win32仍然得到了支持,但目的只是为了与Win16保持兼容 ---------------------------------------------------------------------------------------------------------------------- Escape 鸟山明的一部漫画作品
‘肆’ ajax使用escape后在php后台怎么解码
php没有对应的函数,可以自己写一个:
/**
*jsescapephp实现
*@param$stringthestingwanttobeescaped
*@param$in_encoding
*@param$out_encoding
*/
functionescape($string,$in_encoding='UTF-8',$out_encoding='UCS-2'){
$return='';
if(function_exists('mb_get_info')){
for($x=0;$x<mb_strlen($string,$in_encoding);$x++){
$str=mb_substr($string,$x,1,$in_encoding);
if(strlen($str)>1){//多字节字符
$return.='%u'.strtoupper(bin2hex(mb_convert_encoding($str,$out_encoding,$in_encoding)));
}else{
$return.='%'.strtoupper(bin2hex($str));
}
}
}
return$return;
}
functionunescape($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用这两个函数,推荐使用decodeURI() 和 decodeURIComponent() 来进行url编码比较好;
‘伍’ escape解出来的是unicode编码吗
\u4E2D\u56FD或者%u4E2D%u56FD等字符是什么意思?
这是UNICODE编码,可以用JS的unescape函数解决,Java直接用System.out.println(); 打出来就可以了
下面具体介绍JS中这两种函数的使用
1.escape方法
对String对象编码以便它们能在所有计算机上可读,
escape(charString)
必选项charstring参数是要编码的任意String对象或文字。
说明
escape方法返回一个包含了charstring内容的字符串值(Unicode格式)。所有空格、标点、重音符号以及其他非ASCII字符都用%xx编码代替,其中xx等于表示该字符的十六进制数。例如,空格返回的是"%20 "。
字符值大于 255 的以 %uxxxx 格式存储。
注意 :escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和 encodeURIComponent 方法。
2.unescape 方法
解码用escape()方法编码的string对象
unescape(charstring)
必选项charstring参数是要解码的String对象。
说明
unescape方法返回一个包含charstring内容的字符串值。所有以%xx十六进制形式编码的字符都用ASCII字符集中等价的字符代替。
以 %uxxxx 格式(Unicode 字符)编码的字符用十六进制编码 xxxx 的 Unicode 字符代替.
‘陆’ php中smarty模板的escape转码后的超链接报403
解决办法如下:
1、在php代码中直接使用urlencode处理你的$url,然后assion入smarty模板,输出结果A后,点击链接A看是否可用,
2、如果上述操作后,链接A不可用,就说明是你的浏览器(服务器)不支持直接url安全码的自动解码(是会有某些浏览器或服务器的支持度不够好的)。这时就需要你在php端做urldecode的解码工作,来恢复到常规的url B,从而打开这个常规url B。
3、如果链接A可用,就说明是在smarty中的escape确实是有了问题。那就不要使用这个方法。
4、另外,切记——(href=""),这个引号是必需要的。尽可能避开一些微妙的外在因素的干扰。你可以写成<a href='{"urlceshi.php?name=leo&pwd=123"|escape:"url"}'
‘柒’ php中的escape是什么意思
escape
采用ISOLatin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码
(xx等于该字符在字符集表里面的编码的16进制数字)。
‘捌’ php的escape()和unescape()有什么作用
分别就是加密解密字符串函数。
‘玖’ PHP解密Unicode及Escape加密字符串
在json中不支持中文,用它传送中文数据就会出现数据丢失或者乱码,必须在传送前对要发送的字符串进行编码,由于传送过去需要用js进行数据解析,考虑
到js中有unescape函数,故若在php中有个escape函数,对数据进行编码,在客户端用unescape进行
解码,这样就会方便很多。
本文给大家分享一个PHP解密Unicode及Escape加密字符串函数
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
?php
function
uni_decode($s)
{
preg_match_all('/#([0-9]{2,5});/',
$s,
$html_uni);
preg_match_all('/[%]u([0-9a-f]{4})/ie',
$s,
$js_uni);
$source
=
array_merge($html_uni[0],
$js_uni[0]);
$js
=
array();
for($i=0;$icount($js_uni[1]);$i++)
{
$js[]
=
hexdec($js_uni[1][$i]);
}
$utf8
=
array_merge($html_uni[1],
$js);
$code
=
$s;
for($j=0;$jcount($utf8);$j++)
{
$code
=
str_replace($source[$j],
unicode2utf8($utf8[$j]),
$code);
}
return
$code;//$s;//preg_replace('/u([0-9a-f]{4})/ie',
chr(hexdec('1')),
$s);
}
function
unicode2utf8($c)
{
$str=;
if
($c
0x80)
{
$str.=chr($c);
}
else
if
($c
0x800)
{
$str.=chr(0xc0
|
$c6);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x10000)
{
$str.=chr(0xe0
|
$c12);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
else
if
($c
0x200000)
{
$str.=chr(0xf0
|
$c18);
$str.=chr(0x80
|
$c12
0x3f);
$str.=chr(0x80
|
$c6
0x3f);
$str.=chr(0x80
|
$c
0x3f);
}
return
$str;
}
$str='%u5927%u5BB6%u597D%uFF0C我是孤魂!br
/';
echo
uni_decode($str);
//
大家好,我是孤魂!这是测试文本!
在网上搜索一把,很多用php实现的escape函数,大同小异
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function
phpescape($str){
preg_match_all(/[x80-xff].|[x01-x7f]+/,$str,$newstr);
$ar
=
$newstr[0];
foreach($ar
as
$k=$v){
if(ord($ar[$k])=127){
$tmpString=bin2hex(iconv(GBK,ucs-2,$v));
if
(!eregi(WIN,PHP_OS)){
$tmpString
=
substr($tmpString,2,2).substr($tmpString,0,2);
}
$reString.=%u.$tmpString;
}
else
{
$reString.=
rawurlencode($v);
}
}
return
$reString;
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
‘拾’ php smarty “ | ” ,这个竖杠表示什么
“|” 是变量修饰符与前面变量的间隔符号;
变量修饰符 escape(escape可用于将变量编码或转换成 html, url, 单引号, 十六进制, 十六进制实体, javascript 和 电邮地址。 默认是:html) ,在你的上面的截图中escape的意思是:让$bb中的字符串以html实体的格式输出,
3. 示例:
如果$bb 这个变量是
'Hello'
那么,它使用了修饰符 escape后的输出将会是:
'Hello'
4. 资料页面:
www.smarty.net/docs/zh_CN/language.modifier.escape.tpl
祝愉快!