【发布时间】:2011-07-14 00:32:16
【问题描述】:
标签: php encoding url-encoding
标签: php encoding url-encoding
答案是您无法确定这一点,因为它可能会因请求而异,特别是如果它并非总是从表单提交,而是有时使用 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');
最好的问候, 斯威尔克
【讨论】:
这不是 apache 也不是 mod_php 问题。 PHP 会自动对 urlencoding 进行解码,但它不会对任何内容进行编码,因此无需担心
从这里看来
在 Firefox3 example.com/?action=search&q=автомобиль 中输入时,它会自动转换为:example.com/?action=search&q=%E0%E2%F2%EE%EC%EE%E1%E8%EB% FC
这更像是浏览器或操作系统的问题。
您的操作系统编码似乎是单字节的,而浏览器确实对您的单字节字符串进行了 urlencode。
【讨论】:
您应该保留 UTF8 并使用适当的内容类型标头将页面的字符集设置为 UTF8:
header('Content-type: text/html; charset=utf-8');
【讨论】:
当您直接在 URL 搜索栏中键入非 ASCII 字符时,浏览器似乎会自动将字符转换为 UTF-8 和 URL 编码实体。我没有这方面的硬数据,但这种行为是有道理的。相关问题在这里:Unicode characters in URLs
您的页面使用windows-1252 或其他单字节字符集作为其输出编码,这就是您需要先转换字符数据的原因。
您可以将页面的输出编码更改为 UTF-8 以节省该步骤,但这可能会产生其他后果(例如需要使用多字节字符串函数和/或数据库输出的不同编码等)
【讨论】:
windows-1251 是一种 8 位字符编码,旨在涵盖使用西里尔字母的语言。 Wiki
您可能已在网页中将字符集设置为 windows-1251
【讨论】:
我也遇到过这个问题。我用adobe dreameweaver cs4(非英文版)
我解决如下:
在 PHP 页面文件的顶部添加 header('Content-type: text/html; charset=utf-8');。
重要在adobe dreameweaver中,你应该从top menuModify (M) -> Page Properties (P)修改Page Properties,选择Title/coding并将unicode修改为unicode (uft-8)。
(对不起,这些菜单词被翻译成英文,可能不是真正的词)
【讨论】: