js を使用して URL エンコードを実行し、php を使用してデコードし、php を使用して js のエスケープ関数を実装する 概要_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:41:17
オリジナル
851 人が閲覧しました

Smarty は などの URL を直接エンコードできますが、smarttemplate ではリンクがフォーム送信ではなく js によって送信されるため、自動的にエンコードすることはできません。エンコードされた。
解決策: js を使用して URL 内の中国語文字をエスケープ エンコードします。
リンクをクリックした後の制限時間は次のとおりです:
引用: http://127.0.0.1/shop/product_list.php?p_sort=PHP%u5F00%u53D1%u8D44%u6E90%u7F51
当然ですが、このような効果はPHPのurldecode()やbase64_decode()ではデコードできません。 )。 の。
解決策は、PHP を使用して逆解関数を作成します:


コードをコピーします コードは次のとおりです:
function js_unescape($str)
{
$ret = '';
$len = strlen ($str) ;
for ($i = 0; $i {
if ($str[$i] == '%' && $str[$i+1] == 'u')
{
$val = hexdec(substr($str, $i+2, 4));
if ($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 ;
}


JS エンコーディングは自動的に UTF-8 に変換されるため、正しい結果を得るにはエンコーディング変換を実行する必要があります。そうしないと、中国語の文字が文字化けします。
コードは次のとおりです:
print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));
この時点で、js のエスケープ エンコーディングを正常にデコードできました。
以下の通り:
引用: PHP Development Resource Network
さらに、PHP を使用して js のエスケープ エンコーディングを実装する関数を見つけました:



コードをコピーします

コードは次のとおりです:
function phpescape( $str){$sublen =strlen($str);$retrunString=""; i])>=127)
{
$tmpString=bin2hex(iconv("gb2312","ucs-2",substr($str,$i,2)));
//$tmpString=substr($) tmpString,2,2).substr ($tmpString,0,2); これはウィンドウ
$retrunString.="%u".$tmpString
} else {
$retrunString; でオンにする必要がある場合があります。 .="%".dechex(ord( $str[$i]));
}
}
return $retrunString


この問題に遭遇したことがありますか?



http://www.bkjia.com/PHPjc/321156.html

www.bkjia.com

true
http://www.bkjia.com/PHPjc/321156.html
技術記事

Smarty は、!--{$var|urlencode}-- のように URL を直接エンコードできますが、smarttemplate では利用できないようです。リンクはフォーム送信ではなく js によって送信されるため、自動的にはできません...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。