web-dev-qa-db-ja.com

PHP URLエンコード/デコード

私はこれに受け入れられた解決策を使用しました 質問 たとえば/ index.php?id = 3のidで暗号化するために。問題は、暗号化された値をURLとして送信できないことです。例/ index.php?id = dsf13f3343f23/23 =。 URLに奇妙な文字が含まれることがあるためです。最後に=サインがあることに注意してください

8

URLで渡される値の奇妙な文字は、 _urlencode(_ )を使用してエスケープする必要があります。


たとえば、コードの次の部分:

_echo urlencode('dsf13f3343f23/23=');
_

あなたに与えるだろう:

_dsf13f3343f23%2F23%3D
_

これは、URLパラメーターとして正常に機能します。


また、複数のパラメーターを使用してクエリ文字列を作成する場合は、 http_build_query() 関数を確認してください。

例えば ​​:

_echo http_build_query(array(
    'id' => 'dsf13f3343f23/23=',
    'a' => 'plop',
    'b' => '$^@test', 
));
_

あなたに与えるでしょう:

_id=dsf13f3343f23%2F23%3D&a=plop&b=%24%5E%40test
_

この関数は、パラメーター自体のエスケープと連結を処理します;-)

21
Pascal MARTIN

PHPの urlencode() 関数を使用して、値をURLに挿入する前にエンコードします。

stringurlencode( string$str)
この関数は、URLのクエリ部分で使用される文字列をエンコードするときに、変数を次のページに渡す便利な方法として便利です。

この関数は、=などの「奇妙な」文字を、URLに安全に入力できる形式に変換します。次のように使用できます。

Header('Location: /index.php?id=' . urlencode($id))
4
Lucas Jones

Base64を使用してURLのバイナリ値をエンコードする場合は、 RLとファイル名の安全なアルファベットのバリエーション もあります。

strtr function を使用して、一方をアルファベットからもう一方に変換できます。

$base64url = strtr($base64, '+/', '-_');
$base64 = strtr($base64url, '-_', '+/');

したがって、これらの関数を使用してbase64urlをエンコードおよびデコードできます。

function base64url_encode($str) {
    return strtr(base64_encode($str), '+/', '-_'));
}
function base64url_decode($base64url) {
    return base64_decode(strtr($base64url, '-_', '+/'));
}

参照 に関する私の答え長いmd5ハッシュから短い英数字の文字列を生成する良い方法は何ですか?

4
Gumbo

パラメータの暗号化には使用できません。
そのまま送信:

/index.php?id=3 

何も悪いことはありません。

1