URL には漢字やその他の HTML やその他の特殊文字を渡す必要があり、さまざまな種類の混乱があり、ブラウザごとにエンコード方法が異なるようです。
中国人の場合、一般的なアプローチは次のとおりです:これらのテキスト文字列を URL に渡す前に、まず urlencode($text);
を実行します。
しかし、HTML 文字や SQL インジェクション関連の文字など、いくつかの非常に「危険な」文字については、それらが明らかにシステムに渡される場合、通常、システムはセキュリティ上の理由からそれらを除外します。さて、これらの危険なキャラクターが必要ですが、どうすればよいでしょうか?
私が考える方法は、最初にそれらをbase64_encode($text)し、次にサーバーに到着したときにbase64_decode($text)でデコードすることです。
完璧に見えますが、使用中に別の問題が発生しました。base64_encode でエンコードされた文字列には、「/」、「+」、「=」およびその他の文字が含まれています。
base64_encode() 関数は、ユーザーが送信するとき (送信後)、URL でユーザー入力ビュー (少量のコンテンツ) を渡す必要があるため、bse64_encode() 関数を使用して暗号化します。 viewへジャンプする際にgetで再度受信しましたが、その際に双方の暗号化データが間違っていました
。ユーザー送信の暗号化:
処理ページで get を使用して受信しました:
tPK9tNPNYKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz vI69ehsKEhfHw=
これらの文字は、「スペース」を意味する「+」などの URL エンコードの特殊文字ですが、ブラウザによって「スペース」のエンコード方法が異なります。「+」を使用して表現する場合もあれば、「20」%」を使用する場合もあります。つまり、これらの Base64_encoded 文字列が URL で渡されると、別のブラウザで閲覧すると、サーバーは別の値を取得します。
そこで、私は妥協案を考えました。まず、これらの Base64 でエンコードされた特殊文字を置き換え、サーバーに到達した後に元に戻すというものです。
解決策:1. ユーザーが暗号化された文字列を送信すると、次のように + 文字を他の文字に置き換えます。
2. 処理ページで再度変換します。 :str_replace('_', '+', $content);
次のようにコードをコピーします。
Function Base_encode ($ str) {
$b = split('=', $a[$i]);
echo 'パラメータの値 ', htmlspecialchars(urldecode($b[0])), ' は ', htmlspecialchars( urldecode($ b[1])), "
"; $i++;
}
?>