この記事では、PHP の urldecode 関数とbase64_encode 関数を組み合わせ、さらに私が作成した置換関数を組み合わせて、URL 内の漢字や特殊な危険な文字を安全に転送します。詳細を知りたい友人は参照してください。
URL には漢字やその他の HTML やその他の特殊文字を渡す必要があり、さまざまな種類の混乱があり、ブラウザごとにエンコード方法が異なるようです。
中国人の場合、一般的なアプローチは次のとおりです:これらのテキスト文字列を URL に渡す前に、まず urlencode($text);
を実行します。
しかし、HTML 文字や SQL インジェクション関連の文字など、いくつかの非常に「危険な」文字については、それらが明らかにシステムに渡される場合、通常、システムはセキュリティ上の理由からそれらを除外します。さて、これらの危険なキャラクターが必要ですが、どうすればよいでしょうか?
私が考える方法は、最初にそれらをbase64_encode($text)し、次にサーバーに到着したときにbase64_decode($text)でデコードすることです。
完璧に見えますが、使用中に別の問題が発生しました。base64_encode でエンコードされた文字列には、「/」、「+」、「=」およびその他の文字が含まれています。
Base64_encode() 関数は、ユーザーが送信するとき (送信後)、ユーザー入力ビュー (少量のコンテンツ) を URL に渡す必要があるため、bse64_encode() 関数を使用してビューを暗号化します。処理ページに飛んだところ 再度受信したら、両面の暗号化データが間違っていました
ユーザー送信の暗号化:
処理ページで get を使用して受信しました:
tPK9tNPNYKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz vI69ehsKEhfHw=
これらの文字は、「スペース」を意味する「+」などの URL エンコードの特殊文字ですが、ブラウザによって「スペース」のエンコード方法が異なり、「+」を使用するものと、「20」を使用するものがあります。たとえば、これらのbase64_encoded文字列がURLに渡されると、異なるブラウザで閲覧すると、サーバーは異なる値を取得します。
そこで、私は妥協案を考えました。まず、これらの Base64 でエンコードされた特殊文字を置き換え、サーバーに到達した後に元に戻すというものです。
解決策:1. ユーザーが暗号化された文字列を送信すると、+ 文字を他の文字に置き換えます: str_replace('+', '_', $content);
2. 処理ページで再度変換します: str_replace('_', '+', $content);
関数base_encode($str) { | |||||
$old = Base64_encode($str);
$new = str_replace($src,$dist,$old); ブラウザで得られる効果は以下の通りです xOO6w6Osuf65_aiy_atL_b00Ke5_b8jnus6ho6GjoaM_c urldecodeインスタンスメソッドは非常にシンプルです urldecode (文字列 $str) 例 #1 urldecode() の例
|