【问题标题】:PHP form submit UTF-8PHP表单提交UTF-8
【发布时间】:2011-02-04 19:25:25
【问题描述】:

在我的网站上有一个带有简单文本区域的表单,供人们发布 cmets。问题是有时我会收到 UTF-8 格式的信息,有时会收到 ISO 格式的信息。可以控制吗?

也许我做错了什么,但是浏览器是否有可能改变了它发送的数据的编码?

【问题讨论】:

标签: php html encoding


【解决方案1】:

但是...在编码之前检查字符串是否已经是 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));

所以你不要对字符串进行双重编码。

【讨论】:

    【解决方案2】:

    如果您想确定您接受的是什么字符集,请在您的表单中设置它

    <form method="post" action="/your/url/" accept-charset="UTF-8">
    </form>
    

    您可以在此处查看所有可接受的字符集:Character Sets

    【讨论】:

    • 我相信反之不行。如果我没记错的话,IE 会尊重 UTF-8,但如果你将字符集设置为 ISO,它就会失败。这仅适用于新版本。您还可以将页面的字符集设置为 ayush 提到的以确保为好。
    【解决方案3】:

    您始终可以强制使用 UTF-8。然后,您可以在 UTF-8 广告中发送、接收和存储数据,涵盖大多数人类语言,而无需更改字符集。

    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
    

    【讨论】:

    • 它是 utf-8。没有 utf-81。
    【解决方案4】:

    您可以使用 PHP 的 utf8_encode 函数将 $_POST 数据编码为 UTF-8。

    类似:

    $_POST['comments'] = utf8_encode( $_POST['comments'] );
    

    【讨论】:

    • 这将对已经发送为 utf-8 的内容进行双重编码。
    • 呃。真的。如果你想使用 PHP 进行编码,那么这个 (stackoverflow.com/questions/910793/…) 可能会有所帮助......虽然检测编码非常棘手。
    【解决方案5】:

    我通过在我的 php.ini 文件中更改 mbstring.http_input = pass 解决了这个问题

    【讨论】:

      猜你喜欢
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2012-02-21
      • 2013-06-15
      相关资源
      最近更新 更多