当我通过form get方法发送时,url上的utf-8字符串出现问题


Issue with utf-8 string on url when I send via form get method

我有这样一个表单来发送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"方法?它将完全隐藏你的网址和任何类型的编码。