【发布时间】:2011-02-04 19:25:25
【问题描述】:
在我的网站上有一个带有简单文本区域的表单,供人们发布 cmets。问题是有时我会收到 UTF-8 格式的信息,有时会收到 ISO 格式的信息。可以控制吗?
也许我做错了什么,但是浏览器是否有可能改变了它发送的数据的编码?
【问题讨论】:
在我的网站上有一个带有简单文本区域的表单,供人们发布 cmets。问题是有时我会收到 UTF-8 格式的信息,有时会收到 ISO 格式的信息。可以控制吗?
也许我做错了什么,但是浏览器是否有可能改变了它发送的数据的编码?
【问题讨论】:
但是...在编码之前检查字符串是否已经是 UTF-8。 否则,您对其进行双重编码。
function str_to_utf8 ($string) {
if (mb_detect_encoding($string, 'UTF-8', true) === false) {
$string = utf8_encode($string);
}
return $str;
}
或者使用
$string = utf8_encode(utf8_decode($string));
所以你不要对字符串进行双重编码。
【讨论】:
如果您想确定您接受的是什么字符集,请在您的表单中设置它
<form method="post" action="/your/url/" accept-charset="UTF-8">
</form>
您可以在此处查看所有可接受的字符集:Character Sets
【讨论】:
您始终可以强制使用 UTF-8。然后,您可以在 UTF-8 广告中发送、接收和存储数据,涵盖大多数人类语言,而无需更改字符集。
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
【讨论】:
您可以使用 PHP 的 utf8_encode 函数将 $_POST 数据编码为 UTF-8。
类似:
$_POST['comments'] = utf8_encode( $_POST['comments'] );
【讨论】:
我通过在我的 php.ini 文件中更改 mbstring.http_input = pass 解决了这个问题
【讨论】: