为什么提交得出的rawurlencode() 跟直接输出的不一样的呢?

时间:2023-01-19 21:01:22
<? 
if($_POST['submit']){ 
echo $_POST['name']."=<br/>"; 
echo rawurlencode($_POST['name']); 

echo rawurlencode("女人"); 
?> 
<form method="post"><input type="text" name="name" value=""/><input type="submit" name="submit"/></form>



这样提交“女人”得出:%C5%AE%C8%CB
而直接输出的 rawurlencode("女人"): 又是:%E5%A5%B3%E4%BA%BA

这是为什么呢?

2 个解决方案

#1


因为提交的是gbk,你的php文件是utf8.

#2


另外提醒, 表单提交来的是urlencode,不是rawurlencode,而JS的URIcomponentEncode(是不是这么拼)相当于php的rawurlencode,主要区别就是空格是+还是%20.

你想看到正确结果如下:

<?php
echo iconv("gbk", "utf8", urldecode("%C5%AE%C8%CB"));
echo urldecode("%E5%A5%B3%E4%BA%BA");
?>


希望用户提交Utf8,那么你必须告知浏览器charset="utf-8",方法要么是php header,要么是html meta。

#1


因为提交的是gbk,你的php文件是utf8.

#2


另外提醒, 表单提交来的是urlencode,不是rawurlencode,而JS的URIcomponentEncode(是不是这么拼)相当于php的rawurlencode,主要区别就是空格是+还是%20.

你想看到正确结果如下:

<?php
echo iconv("gbk", "utf8", urldecode("%C5%AE%C8%CB"));
echo urldecode("%E5%A5%B3%E4%BA%BA");
?>


希望用户提交Utf8,那么你必须告知浏览器charset="utf-8",方法要么是php header,要么是html meta。