[PHP] URLの暗号化と復号化(リバーシブル)

URLの暗号化と復号化(リバーシブル)

 

暗号化:urlencode

urlencode(文字列 $str ):文字列

この関数を使用すると、文字列を簡単にエンコードしてURLのリクエスト部分で使用できます。また、変数を次のページに簡単に渡すこともできます。

文字列を返します。-_。を除くこの文字列内のすべての英数字以外の文字は、パーセント記号(%)とそれに続く2桁の16進数に置き換えられ、スペースはプラス記号(+)としてエンコードされます。このエンコーディングは、WWWフォームのPOSTデータのエンコーディングと同じであり、application / x-www-form-urlencodedのメディアタイプエンコーディングと同じです。歴史的な理由により、このエンコーディングは、スペースがプラス記号(+)としてエンコードされるという点でRFC1738エンコーディングとは異なります。

例1:

$userInput = "测试";
echo '<a href="mycgi?foo='. urlencode($userInput). '">';
// 结果:<a href="mycgi?foo=%E6%B5%8B%E8%AF%95">

 出力コンテンツはhtmlタグであるため、表示時にWebページのソースコードを表示するか、htmlentities関数を使用する必要があります。

$userInput = "测试";
//echo '<a href="mycgi?foo='. urlencode($userInput). '">';
echo htmlentities('<a href="mycgi?foo='. urlencode($userInput). '">');

出力結果:

(このとき、文字列として出力されます)

例2:

複数のパラメータの場合:

$foo = "测试1";
$bar = "测试2";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';

echo '<a href="mycgi?' . $query_string . '">';

 

 

注意:

HTMLエンティティに一致する変数に注意してください。&amp、&copy、&poundなどはブラウザによって解析され、予期される変数名の代わりに実際のエンティティが使用されます。これは明らかな混乱であり、W3Cは数年前から人々に警告してきました。参照アドレス:»http://www.w3.org/TR/html4/appendix/notes.html#hB.2.2

PHPは、arg_separator.iniコマンドを使用して、パラメーター区切り文字をW3Cが推奨するセミコロンに変更することをサポートしています。残念ながら、ほとんどのユーザーエージェントは、セミコロン区切り形式でフォームデータを送信しません。より簡単な解決策は、区切り文字として&の代わりに&amp;を使用することです。このためにPHPのarg_separatorを変更する必要はありません。&のままにし、htmlentities() または htmlspecialchars()のみを使用し  てURLをエンコードします。

 

復号化:urldecode

urldecode(文字列 $str ):文字列

指定されたエンコードされた文字列内の任意の%##をデコードします。プラス記号( '+')はスペース文字にデコードされます。

例1(リンク全体の暗号化と復号化):

$url = '<a href="http://www.xxx.com/test?foo=测试1&bar=测试2">';
$encodeUrl = urlencode($url);
echo $encodeUrl . "\n";
echo urldecode($encodeUrl);

結果:

 

例2(パラメーターの暗号化と復号化):

urldecodeを使用して、受信したパラメーター値を復号化するだけです

//<a href="mycgi?foo=%E6%B5%8B%E8%AF%951&bar=%E6%B5%8B%E8%AF%952">
$param1 = '%E6%B5%8B%E8%AF%951';
$param2 = '%E6%B5%8B%E8%AF%952';
echo urldecode($param1) . "\n";
echo urldecode($param2) ;

結果:

 

おすすめ

転載: blog.csdn.net/I_lost/article/details/105388252