字符编码/解码返回?提交表格时的标志或奇怪的结果

时间:2015-02-01 00:45:51

标签: php utf-8 character-encoding decode utf8mb4

我知道有很多类似的帖子,但到目前为止我无法解决我的问题,虽然我通过他们。当我点击search keywords按钮时,我正在尝试打印精确的Search,但不幸的是我看到了编码版本,我无法解码。我读了utf8_decodeiconv但到目前为止没有运气。我在我的网站上使用了很多语言,但我只是在努力处理下面的字符。

注意:我在MySQL中使用utf8mb4_unicode_ci作为collation,并且相同的关键字作为Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü插入到表中,因此由于编码差异,搜索将会在大多数情况下失败。

我也将内部字符设置为mb_internal_encoding("UTF-8");

搜索关键字: Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü

网站

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form method="post" action="search.php">
            Keyword: <input type="text" name="keywords" />
            <button type="submit" class="btn btn-default">Search</button>
        </form>
    </body>
</html>

的search.php

var_dump($_POST);
echo $_POST['keywords'];
echo '<br />';
echo utf8_decode($_POST['keywords']);
echo '<br />';
echo iconv("ISO-8859-1", "UTF-8", $_POST['keywords']);

OUTPUT当EXIST中的UTF-8标记

array (size=1)
      'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=46)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
Ç, ?, ?, Ö, ?, Ü, ç, ?, ?, ö, ?, ü
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü

OUTPUT当REMOVED中的UTF-8标记

// This will also break front-end for certain characters.
array (size=1)
      'keywords' => string 'Ç, &#286;, &#304;, Ö, &#350;, Ü, ç, &#287;, &#305;, ö, &#351;, ü' (length=64)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü

3 个答案:

答案 0 :(得分:0)

您是否在PHP中设置了内部编码? mb_internal_encoding(&#34; UTF-8&#34); 如果前端和后端都使用UTF-8,那应该没有问题!

答案 1 :(得分:0)

accept-charset="ISO-8859-1"添加到表单元素解决了问题。

<强>输出

array (size=1)
  'keywords' => string 'Ç, &#286;, &#304;, Ö, &#350;, Ü, ç, &#287;, &#305;, ö, &#351;, ü' (length=64)

Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü

注意:我是否mb_internal_encoding("UTF-8");,它不会影响结果。

答案 2 :(得分:0)

这是您的解决方案。

根据您提供的数据,您混合了正好字符和html编码字符串。

为了解码它们,请使用html_entity_decode()函数:

$str = 'Ç, &#286;, &#304;, Ö, &#350;, Ü, ç, &#287;, &#305;, ö, &#351;, ü';
var_dump($str);
var_dump(html_entity_decode($str));