ホームページ  >  記事  >  バックエンド開発  >  php URLで漢字や特殊な危険文字を送信する解決策_PHPチュートリアル

php URLで漢字や特殊な危険文字を送信する解決策_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 10:59:31902ブラウズ

この記事では、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() 関数を使用してビューを暗号化します。処理ページに飛んだところ 再度受信したら、両面の暗号化データが間違っていました

ユーザー送信の暗号化:

tPK9tNPNYKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz+vI69ehsKEhfHw=

処理ページで get を使用して受信しました:

tPK9tNPNYKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz vI69ehsKEhfHw=

比較してみると、プラス記号が抜けているのですが、原因は分かりません(取得時に+文字が取得できない可能性も考えられますので、専門家のアドバイスをお願いします。)

これらの文字は、「スペース」を意味する「+」などの URL エンコードの特殊文字ですが、ブラウザによって「スペース」のエンコード方法が異なり、「+」を使用するものと、「20」を使用するものがあります。たとえば、これらのbase64_encoded文字列がURLに渡されると、異なるブラウザで閲覧すると、サーバーは異なる値を取得します。

そこで、私は妥協案を考えました。まず、これらの Base64 でエンコードされた特殊文字を置き換え、サーバーに到達した後に元に戻すというものです。

解決策:

1. ユーザーが暗号化された文字列を送信すると、+ 文字を他の文字に置き換えます: str_replace('+', '_', $content);

2. 処理ページで再度変換します: str_replace('_', '+', $content);


コードは次のとおりですコードをコピー関数base_encode($str) { $src = array("/","+","="); $dist = array("_a","_b","_c");
$old = Base64_encode($str);

$new = str_replace($src,$dist,$old);
戻り $new;
}

関数base_decode($str) {
$src = array("_a","_b","_c");
$dist = array("/","+","=");
$old = str_replace($src,$dist,$str);
$new =base64_decode($old);
戻り $new;
}



ブラウザで得られる効果は以下の通りです

xOO6w6Osuf65_aiy_atL_b00Ke5_b8jnus6ho6GjoaM_c

urldecodeインスタンスメソッドは非常にシンプルです

urldecode (文字列 $str)
指定されたエンコードされた文字列内の任意の %## をデコードします。デコードされた文字列を返します。

例 #1 urldecode() の例

コードは次のとおりです コードをコピー

$a = 爆発('&', $QUERY_STRING);
$i = 0;
while ($i $b = スプリット('=', $a[$i]);
echo 'パラメータの値', htmlspecialchars(urldecode($b[0])),
' は ', htmlspecialchars(urldecode($b[1])), "
";
$i++;
}
?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445609.html技術記事この記事では、php の urldecode 関数とbase64_encode 関数を組み合わせて、URL 内の漢字や特殊な危険な文字を安全に転送するために自分で作成した置換関数を組み合わせます。詳細を知りたい友人は参照してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。