ホームページ バックエンド開発 PHPチュートリアル php_PHP チュートリアルのエスケープ関数の解析

php_PHP チュートリアルのエスケープ関数の解析

Jul 21, 2016 pm 03:02 PM
escape href php url 関数 漢字 コーディング 解析する 行為 使用

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 = ''; strlen($str ) ) $val);
else if($val 6)&0x3f)).chr(0x80|($val&0x3f)); $i] == '%' )
}
else $ret .= $str[$i];
}
return $ret ;}


JS エンコードは自動的に UTF-8 に変換されるため、正しい結果を得るにはエンコード変換を実行する必要があります。そうしないと中国語の文字が文字化けします。 。ただし、UTF-8 エンコーディングを使用する場合、この手順は必要ありません。

コードは次のとおりです: print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));

この時点で、js のエスケープ エンコーディングを正常にデコードできました。
以下の通り:
さらに、PHPを使用してjsのエスケープエンコーディングを実装する関数を見つけました:



コードをコピー

コードは次のとおりです:

関数 phpescape($str)
{ ($str[$i])>=127) tmpString=substr($tmpString,2,2).substr($tmpString,0,2);これをウィンドウの下に
$retrunString.="%u".$tmpString
} else
{


中国語は json ではサポートされていません。中国語データの送信にのみ使用してください。データの損失や文字化けが発生します。送信する文字列は送信前にエンコードする必要があるため、jsのunescape関数を考慮し、phpにエスケープ関数があればデータをエンコードしてクライアント側でデコードします。より便利になります。
まずはインターネットで検索してください。以下のような php に実装されている多くのエスケープ関数は似ています:



コードをコピーします

コードは次のとおりです:


function phpEscape($str) {
preg_match_all( "/[x80 -xff].|[x01-x7f]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(ord ($v[0]) $ar[$k] = rawurlencode($v);
else
$ar[$k] = "%u".bin2hex(iconv("GB2312 ","UCS -2",$v));}return join("",$ar);}
この関数は非常にうまく機能しますが、原理を理解していない初心者もいるかもしれません私もそうですが、この機能を使うときにいつも不安を感じています。この機能の原理を説明します。そして、他人のコードを再利用することは巨人の肩の上に立つようなものだと思いますが、他人のコードを理解していなければ、遅かれ早かれ地に落ちることになります。

最初の文:
preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r); これは、正規表現を使用して文字列 [x80] 内のすべての文字と一致します。 -xff] は、中国語の文字に一致します。1 つは 16 進数の 80 から ff までの文字で、これはたまたま中国語の文字エンコーディングの最初の文字です。このようにして、漢字を完全に一致させることができます。 Unicode での漢字のエンコードについては、オンラインで検索できます。同様に、[x01-x7f]+英語文字列は、最も古い英語は ASCII エンコードであるため、エンコード値は 128 未満、つまり 16 進数で 01 から 7f まで、「+」は 1 つ以上の文字を表すため、 [x01 -x7f]+ は、複数の連続する英語の文字列と一致します。



コードをコピーします

コードは次のとおりです:

$ar = $r[0]; //$r[0] は一致した配列を格納します
foreach($ar as $k=>$v) {
if(ord($v[0] ) < 128) //文字エンコーディングの値が 128 未満の場合は、英語の文字であることを意味します
hex(iconv("GB2312","UCS-2",$v)); //それ以外の場合は、 iconv 関数は、中国語の文字を ucs-2 エンコーディング (Unicode エンコーディングである ucs-2 エンコーディング) に変換します
}


JavaScript では、unescape を使用して
u0391-uFFE5 と u4e00-u9fa5 をデコードして中国語に一致させることができます
しかし、前者には A- が含まれているようです漢字の下の¥と後者は純粋な漢字である可能性があります。 decoding関数は次のとおりです。コードは次のとおりです{S if (Substr ($ v, 0,2) == "%u")
$ AR [$ k] = iconv ("ucs-2", "gbk", Pack ("h4", substr ($ v ,-4)); H4",substr ($v,3,-1))); ","GBK",pack("n",substr($v,2,-1)));
1. GBK (GB2312/GB18030)

x00-xff GBK の全角エンコード範囲
x20-x7f ASCIIxa1-xff 中国語x80-xff 中国語2. UTF-8 (Unicode)
(中国語)
x3130-x318F (韓国語
xAC00-xD7A3 (韓国語)
u0800-u4e00 (日本語)
ps: 韓国語は [u9fa5] より大きい文字です

通常の例:

preg_replace("/([x80 - xff])/","",$str);
preg_replace("/([u4e00-u9fa5])/","",$str);




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

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/327931.html
技術記事
js を使用して URL 内の中国語文字をエスケープ エンコードします。 a href="" onclick="window.open('product_list.php?p_sort='+escape('Script Home'));"リンクをクリックした後の効果は次のとおりです: 引用: http://...




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles