php中urldecode()和urlencode()起什么作用啊

php中urldecode()和urlencode()起什么作用啊,第1张

urlencode()编码:对字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

urldecode()解码:还原 URL 编码字符串。

示例:

<?php

header("Content-Type:text/htmlcharset=utf-8")

//对参数值进行编码

$parm=urlencode("演示php-mysql")

//拼接url

$url="decode.php?par=".$parm

?>

<a href="<?php echo $url?>">urlencode演示</a>

点击连接后地址栏中汉字被编码了:

http://localhost/decode.php?par=%E6%BC%94%E7%A4%BAphp-mysql

------------------------------------------------------------------------

//decode.php

<?php

//获取参数值

$parValue=$_GET['par']

//解码

echo urldecode($parValue)

//运行结果:演示php-mysql

?>

解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来。具体如下:

//urlencode处理

function json_array($obj) {

    foreach($obj as $key => $value) {

        if(is_array($obj[$key])) {

            $obj[$key] = json_array($obj[$key])

        }else{

            $obj[$key] = urlencode($value)

        }

    }

    return $obj

}

//urldecode解密转换为中文字符

function _json($obj) {

    return urldecode(json_encode(json_array($obj)))

}

echo _json($json)//$json为你要输出的json数组

此处递归调用是为了处理多维数组······

没有加密,因为地址栏传明文参数不是太好,又不能使用不可解密的加密字符串,所以就转了另外一种格式传递,可以反转换的,urldecode函数就是转换url地址中的“%##”,你那个转出来是“th6sbehqla4c”,不用转gbk和utf8,和gbk utf8没有关系。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6140426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存