ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルの URL に中国語の文字と特殊な危険文字を渡す場合の解決策

PHP_PHP チュートリアルの URL に中国語の文字と特殊な危険文字を渡す場合の解決策

WBOY
WBOYオリジナル
2016-07-21 14:59:091052ブラウズ

URL には漢字やその他の HTML やその他の特殊文字を渡す必要があり、さまざまな種類の混乱があり、ブラウザごとにエンコード方法が異なるようです。

中国人の場合、一般的なアプローチは次のとおりです:

これらのテキスト文字列を URL に渡す前に、まず urlencode($text);

を実行します。

しかし、HTML 文字や SQL インジェクション関連の文字など、いくつかの非常に「危険な」文字については、それらが明らかにシステムに渡される場合、通常、システムはセキュリティ上の理由からそれらを除外します。

さて、これらの危険なキャラクターが必要ですが、どうすればよいでしょうか?

私が考える方法は、最初にそれらをbase64_encode($text)し、次にサーバーに到着したときにbase64_decode($text)でデコードすることです。

完璧に見えますが、使用中に別の問題が発生しました。base64_encode でエンコードされた文字列には、「/」、「+」、「=」およびその他の文字が含まれています。

base64_encode() 関数は、ユーザーが送信するとき (送信後)、URL でユーザー入力ビュー (少量のコンテンツ) を渡す必要があるため、bse64_encode() 関数を使用して暗号化します。 viewへジャンプする際にgetで再度受信しましたが、その際に双方の暗号化データが間違っていました

ユーザー送信の暗号化:

tPK9tNPNYKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz+vI69ehsKEhfHw=

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

tPK9tNPNYKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz vI69ehsKEhfHw=

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

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

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

解決策:

1. ユーザーが暗号化された文字列を送信すると、次のように + 文字を他の文字に置き換えます。

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

次のようにコードをコピーします。

Function Base_encode ($ str) {

$ src = array ("/", "+", "_b","_c"); $old =base64_encode($str); $src = array("_a", "_b", "_c"); $dist = array("/", "+", "="); $old = str_replace($src,$dist ) ,$ str);
xOO6w6Osuf65_aiy_atL_b00Ke5_b8jnus6ho6GjoaM_c

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

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

例 #1 urldecode() の例




コードをコピー

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


$a =explode('&', $QUERY_STRING);
$i = 0;

while ($i < count( $a) ) {

$b = split('=', $a[$i]);

echo 'パラメータの値 ', htmlspecialchars(urldecode($b[0])),

' は ', htmlspecialchars( urldecode($ b[1])), "
"; $i++;

}
?>

http://www.bkjia.com/PHPjc/328166.htmlwww.bkjia.com
tru​​e

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

技術記事

URL には中国語の文字や HTML などの特殊文字を渡す必要があります。中国語の場合、ブラウザごとにエンコード方法が異なるようです。

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