ホームページ  >  記事  >  バックエンド開発  >  js と php が URL エンコードを処理する方法について_PHP チュートリアル

js と php が URL エンコードを処理する方法について_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:37:09853ブラウズ

解決策: 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

tru​​e

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

技術記事

解決策: js を使用して、URL 内の中国語文字をエスケープ エンコードします。 コードをコピーします コードは次のとおりです: a href="" onclick="window.open('product_list.php?p_sort='+escape('PHP Development Resource Network'));"...