【PHP】URL加密解密(可逆)

URL加密解密(可逆)

加密:urlencode

urlencode ( string $str ) : string

此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 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标签,所以查看时需要查看网页源代码查看,或者使用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#h-B.2.2

PHP 通过 arg_separator.ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 &amp; 代替 & 作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &,而仅使用 htmlentities() 或 htmlspecialchars() 对你的 URL 进行编码。

解密:urldecode

urldecode ( string $str ) : string

解码给出的已编码字符串中的任何 %##。 加号('+')被解码成一个空格字符。

示例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