首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >utf8编码问题

utf8编码问题
EN

Stack Overflow用户
提问于 2011-03-12 11:22:33
回答 6查看 6.3K关注 0票数 1

当我试图使用urlencoded (一些cyrilic单词) _GET url时:

http://example.com/?action=search&q=%E0%E2%F2%EE%EC%EE%E1%E8%EB%FC

解码后:

代码语言:javascript
复制
echo urldecode($_GET['q']); // it prints: ���������

因此,我需要通过以下方式完成对utf-8的转换(因为我的整个应用程序都使用utf-8):

代码语言:javascript
复制
mb_convert_encoding($_GET['q'], "UTF-8", "windows-1251");

这也很有帮助,但质疑

谁/怎么说应该是 "windows-1251“?它从哪里来的?如果我要使用其他语言,我如何定义适当的编码?魔法在哪里?

(更新):页面编码是utf-8 (update):实际上,urldecode($_GET'q')甚至不需要,看起来像是apache+php模块做所有事情,但是,仍然不知道哪里有秘密。

EN

回答 6

Stack Overflow用户

发布于 2011-03-12 11:41:26

答案是,您无法确定这一点,因为它可能会从一个请求更改到另一个请求,特别是如果它并非总是从表单提交,但有时使用ajax发送,或者用户直接在地址栏中键入。

我的工作是一个应用程序,是波兰语。该应用程序使用ISO-8859-2代码页,所有html输出都是在此编码中提供的。

根据请求的上下文,应用程序以两种不同的编码方式接收请求:

  1. 如果请求是由于表单提交而发出的,则编码与提交的表单的html页面相同。我认为它可以用form元素的accept-charset属性进行修改,但我还没有尝试过。
  2. 如果请求是用Ajax发出的,那么它总是UTF-8 (至少在Chrome和Firefox中是这样,因为我们的客户端只使用这些浏览器)。
  3. 如果请求是手动输入到URL中的,那么它通常是UTF-8,但是如果它是书签或类似的东西,那么它可能是其他编码(取决于书签是如何创建的)。

所以,真的不可能确定。如果可以的话,一定要使用UTF-8。否则使用字符集检测(检查它是否为UTF-8,如果不返回到基于应用程序使用的语言的最可能编码)。

我使用以下代码:

代码语言:javascript
复制
<?php
$t = 'zażółć gęślą jaźń';
echo mb_detect_encoding($t, 'UTF-8,ISO-8859-2');

我向你问好,SWilk

票数 3
EN

Stack Overflow用户

发布于 2011-03-12 11:27:33

这不是apache或mod_php问题。PHP确实会自动解码urlencoding,但是它不会对任何东西进行编码,所以没有什么可担心的。

从这看上去

在输入Firefox3 example.com/?action=search&q=автомобиль时,它会自动转换为:Firefox3

这更像是浏览器或操作系统的问题。

您的操作系统编码似乎是单字节的,浏览器会对您的单字节字符串进行urlencode。

票数 1
EN

Stack Overflow用户

发布于 2011-03-12 11:27:13

您应该保留UTF8,并使用适当的内容类型头将页面的字符集设置为UTF8:

代码语言:javascript
复制
header('Content-type: text/html; charset=utf-8');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5282182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档