我有这样一个表单来发送utf-8字符串参数。
<form rel="search" action="/archives" method="get">
<input name="key" type="text" value="تست" />
<input type="submit" value="submit" />
</form>
但是url变为
http://localhost/archives?key=%26%231578%3B%26%231587%3B%26%231578%3B
并且目的地中该参数的值错误:*3*
有没有一种方法可以避免像这样在url中编码:http://localhost/archives?key=تست
因为若我在浏览器中输入http://localhost/archives?key=تست
,则destination中该参数的值为true。。。也编码stiring是丑陋的url
您看到的URL更改非常正常:浏览器需要对请求进行URL编码,以创建有效的URL查询字符串。PHP会自动对所有$_GET参数进行URL解码,所以您不需要关心这一点。
首先:html的字符集是否正确设置为utf-8?
http://www.w3.org/International/O-charset
html5:
<meta charset="utf-8">
其他html:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
也在xhtml上:
<?xml version="1.0" encoding="utf-8" ?>
第二:你的网络服务器是为utf-8服务的吗?浏览器是否正在对get请求建立utf-8编码?
在apache上,您可以在httpd.conf:上设置编码
AddDefaultCharset utf-8
此外,您可以在PHP:上设置标题
header("Content-Type: text/html;charset=UTF-8");
您可以使用开发人员工具上的网络选项卡(chrome上的ctrl+shift+i)检查已送达文档的内容类型标题和获取请求
第三:检查这个mbstring cheashet,以正确处理PHP 中的多字节字符集
http://blog.loftdigital.com/blog/php-utf-8-cheatsheet
另外,看看另一个答案:
UTF-8不适用于HTML表单
既然要向服务器发送信息,为什么不使用POST呢?在这种情况下,URL中不会显示任何参数。
<form rel="search" action="/archives" method="post">
<input name="key" type="text" value="تست" />
<input type="submit" value="submit" />
</form>
您可以使用读取参数
$_POST['key']
为什么不使用"post"方法?它将完全隐藏你的网址和任何类型的编码。