Home  >  Article  >  Backend Development  >  Use js to perform url encoding and then use php to decode it and use php to implement js's escape function summary_PHP tutorial

Use js to perform url encoding and then use php to decode it and use php to implement js's escape function summary_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:41:17871browse

smarty can directly encode the url, such as
but it seems not to be available in smarttemplate. Since the link is submitted by js instead of form submission, it cannot Automatic coding.
Solution: Use js to escape encode the Chinese characters in the URL.

The time after clicking the link like this :
Quote: http://127.0.0.1/shop/product_list.php?p_sort=PHP%u5F00%u53D1%u8D44%u6E90%u7F51
To generate such an effect, it is obvious to use PHP's urldecode() Or base64_decode() cannot be decoded.
Solution, use PHP to write an inverse solution function:

Copy code The code is as follows:

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;
}

Note that JS encoding will be automatically converted to UTF-8, so encoding conversion must be performed to get the correct result, otherwise it will Chinese garbled characters.
The code is as follows:
print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));
At this point we have successfully decoded the escape encoding of js .
As follows:
Quote: PHP Development Resource Network
In addition, I found a function that uses PHP to implement escape encoding of js:
Copy code The code is as follows:

function phpescape($str)
{
$sublen=strlen($str);
$retrunString="";
for ($ i=0;$i<$sublen;$i++)
{
if(ord($str[$i])>=127)
{
$tmpString=bin2hex(iconv( "gb2312","ucs-2",substr($str,$i,2)));
//$tmpString=substr($tmpString,2,2).substr($tmpString,0,2) ;You may need to open this item under window
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord( $str[$i]));
}
}
return $retrunString;
}

Have you ever encountered this problem?

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/321156.htmlTechArticlesmarty can directly encode the url, such as!--{$var|urlencode}-- but in smarttemplate It seems like not, since the link is submitted by js instead of form submission, it cannot be automatically...