解決策: 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 & lt; $ len; $ i ++) {
IF ($ Str [$ i] == '%' && $ Str [$ i+1] == 'U') {
$ Val = HEXDEC (SUBSTR ($ Str, $ i, $ i, $ i, $ i, $ i +2, 4)); 4 if ($ 値 & lt; 0x7f) $ RET. = chr ($ 値)
Else IF ($ Val & LT; 0x800) )$ ret = chr(0xc0 |($ val>> 6))。
から
= $ str [$ i];
JS エンコードは自動的に UTF-8 に変換されるため、正しい結果を得るにはエンコード変換を実行する必要があります。そうしないと、中国語の文字化けが発生します。
コードをコピーします
コードは次のとおりです:
print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));
この時点で、js のエスケープ エンコーディングを正常にデコードできました。
さらに、PHP を使用して js のエスケープ エンコーディングを実装する関数を見つけました:
コードをコピーします
コードは次のとおりです: 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); ウィンドウの下で必要になる場合があります。これをオンにします
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord($str[$i ]));
}} return $retrunString;}
http://www.bkjia.com/PHPjc/736804.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/736804.html
技術記事
解決策: js を使用して、URL 内の中国語文字をエスケープ エンコードします。 コードをコピーします コードは次のとおりです: a href="" onclick="window.open('product_list.php?p_sort='+escape('PHP Development Resource Network'));"...