当我通过表单get方法发送时,在url上发出utf-8字符串问题

时间:2014-04-22 08:16:07

标签: php string forms url utf-8

我有一个这样的表格来发送utf-8字符串参数。

<form rel="search" action="/archives" method="get">

 <input name="key" type="text" value="تست" />

 <input type="submit" value="submit"  />

</form>

但网址更改为

http://localhost/archives?key=%26%231578%3B%26%231587%3B%26%231578%3B

目的地中此参数的值是错误的:*3*

有没有办法避免像这样的网址编码:http://localhost/archives?key=تست

因为如果我在浏览器中输入http://localhost/archives?key=تست,则目的地中此参数的值为true ...还在网址中编码stirng是丑陋的

3 个答案:

答案 0 :(得分:1)

您看到的URL更改完全正常:浏览器需要URL encode创建有效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");

您可以使用开发人员工具上的网络标签检查所提供文档的内容类型标题和获取请求(ctrl + shift + i on chrome)

第三:查看这个mbstring的数据表,以正确处理PHP中的多字节字符集

http://blog.loftdigital.com/blog/php-utf-8-cheatsheet

另外,请查看其他答案:

UTF-8 not working in HTML forms

答案 1 :(得分:0)

由于您要向服务器发送信息,为什么不使用POST?在这种情况下,URL中不会显示任何参数。

<form rel="search" action="/archives" method="post">

 <input name="key" type="text" value="تست" />

 <input type="submit" value="submit"  />

</form>

您可以使用

读取参数
$_POST['key']

答案 2 :(得分:0)

为什么不使用“post”方法呢?它将完全隐藏您的网址和任何类型的编码。