当我试图使用urlencoded (一些cyrilic单词) _GET url时:
http://example.com/?action=search&q=%E0%E2%F2%EE%EC%EE%E1%E8%EB%FC
解码后:
echo urldecode($_GET['q']); // it prints: ���������因此,我需要通过以下方式完成对utf-8的转换(因为我的整个应用程序都使用utf-8):
mb_convert_encoding($_GET['q'], "UTF-8", "windows-1251");这也很有帮助,但质疑
谁/怎么说应该是 "windows-1251“?它从哪里来的?如果我要使用其他语言,我如何定义适当的编码?魔法在哪里?
(更新):页面编码是utf-8 (update):实际上,urldecode($_GET'q')甚至不需要,看起来像是apache+php模块做所有事情,但是,仍然不知道哪里有秘密。
发布于 2011-03-12 11:41:26
答案是,您无法确定这一点,因为它可能会从一个请求更改到另一个请求,特别是如果它并非总是从表单提交,但有时使用ajax发送,或者用户直接在地址栏中键入。
我的工作是一个应用程序,是波兰语。该应用程序使用ISO-8859-2代码页,所有html输出都是在此编码中提供的。
根据请求的上下文,应用程序以两种不同的编码方式接收请求:
所以,真的不可能确定。如果可以的话,一定要使用UTF-8。否则使用字符集检测(检查它是否为UTF-8,如果不返回到基于应用程序使用的语言的最可能编码)。
我使用以下代码:
<?php
$t = 'zażółć gęślą jaźń';
echo mb_detect_encoding($t, 'UTF-8,ISO-8859-2');我向你问好,SWilk
发布于 2011-03-12 11:27:33
这不是apache或mod_php问题。PHP确实会自动解码urlencoding,但是它不会对任何东西进行编码,所以没有什么可担心的。
从这看上去
在输入Firefox3 example.com/?action=search&q=автомобиль时,它会自动转换为:Firefox3
这更像是浏览器或操作系统的问题。
您的操作系统编码似乎是单字节的,浏览器会对您的单字节字符串进行urlencode。
发布于 2011-03-12 11:27:13
您应该保留UTF8,并使用适当的内容类型头将页面的字符集设置为UTF8:
header('Content-type: text/html; charset=utf-8');https://stackoverflow.com/questions/5282182
复制相似问题