Web開発の過程で、URLに漢字やHTMLなどの特殊文字を渡す必要がある場合、ブラウザによってエンコードが異なるため、常にさまざまな小さな問題に遭遇するようです。中国語の場合、一般的なアプローチは次のとおりです:
これらのテキスト文字列を URL に渡す前に、最初に urlencode($text) を実行します。
しかし、HTML 文字や SQL インジェクション関連の文字など、非常に「危険な」文字の場合、それらが明らかにシステムに渡される場合、システムは通常、セキュリティ上の理由からそれらをフィルタリングして除外します。
それでは、これらの危険な文字がフィルタリングされないようにする必要がある場合はどうすればよいでしょうか?
私が考える方法は、最初に base64_encode($text) でエンコードし、次にサーバーに到達したときに base64_decode($text) でデコードすることです。
は完璧に見えますが、使用中に別の問題が発生しました。 base64_encode エンコードされた文字列には、「/」、「+」、「=」およびその他の文字、
これらの文字は、「スペース」を表す「+」などの URL エンコードの特殊文字ですが、ブラウザによって「スペース」のエンコード方法が異なります。「+」を使用して表現する場合と、「+」を使用して表現する場合があります。 「スペース」。「20%」は、つまり、これらのbase64_encode でエンコードされた文字列が URL に渡された場合、異なるブラウザで閲覧すると、サーバーは異なる値を取得することを意味します。
そこで、私は妥協案を考えました。まず、これらの Base64 でエンコードされた特殊文字を置き換え、サーバーに到達した後に元に戻すというものです。
function base_encode($str) { $src = array("/","+","="); $dist = array("_a","_b","_c"); $old = base64_encode($str); $new = str_replace($src,$dist,$old); return $new; } function base_decode($str) { $src = array("_a","_b","_c"); $dist = array("/","+","="); $old = str_replace($src,$dist,$str); $new = base64_decode($old); return $new; }
xOO6w6Osuf65_aiy_atL_b00Ke5_b8jnus6ho6GjoaM_c
ははは、それがどのように機能するか見てみましょう。 。 。
興味のある記事