漢字および特殊な危険文字を送信する URL の解決策 (参考のみ) urldecode、base64_encode

WBOY
リリース: 2016-06-21 08:46:53
オリジナル
1289 人が閲覧しました

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

ははは、それがどのように機能するか見てみましょう。 。 。

興味のある記事

    PHP 関数 urlencode()、urldecode()、rawurlencode()、rawurldecode()
  • 制限方法js では英語の文字と数字のみに変換されますが、中国語やその他の特殊文字は変換されません
  • php は独自の MVC フレームワークの単純なケースを作成し、参考用としてのみアイデアを提供します
  • で送信される文字化けする中国語の文字に対する解決策AJAX で POST または GET
  • テーブル構造を変更する mysql コマンド: フィールドの追加、削除、変更、フィールド順序の調整
  • PHP でデータを送信するにはcurl postを使用する 取得方法とメソッドのまとめWeb ページ データ
  • js URL 内の指定されたパラメータの値を変更します
  • チェックボックスとラジオはテキストに対して水平および垂直になります中央揃えの解決策



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート