Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字符编码/解码返回?提交表格时签署或提交奇怪的结果_Php_Utf 8_Character Encoding_Decode_Utf8mb4 - Fatal编程技术网

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

Php 字符编码/解码返回?提交表格时签署或提交奇怪的结果,php,utf-8,character-encoding,decode,utf8mb4,Php,Utf 8,Character Encoding,Decode,Utf8mb4,我知道有很多类似的帖子,但到目前为止,我无法解决我的问题,虽然我通过他们。当我点击搜索按钮时,我试图打印准确的搜索关键字,但不幸的是,我看到了编码版本,无法解码。我读了很多书,但到目前为止运气不好。我的网站中使用了多种语言,但我只是在与下面的字符作斗争 注意:我在MySQL中使用了utf8mb4\u unicode\u ci作为排序规则,并在表中插入了与相同的关键字İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü因此,由于编码差异,搜索在

我知道有很多类似的帖子,但到目前为止,我无法解决我的问题,虽然我通过他们。当我点击
搜索
按钮时,我试图打印准确的
搜索关键字
,但不幸的是,我看到了编码版本,无法解码。我读了很多书,但到目前为止运气不好。我的网站中使用了多种语言,但我只是在与下面的字符作斗争

注意:我在MySQL中使用了
utf8mb4\u unicode\u ci
作为
排序规则
,并在表中插入了与
相同的关键字İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
因此,由于编码差异,搜索在大多数情况下都会失败

我还将内部字符设置为
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>
移除UTF-8标签时的输出

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

你用PHP设置内部编码了吗?mb_内部_编码(“UTF-8”);
如果前端和后端都使用UTF-8,那么应该没有问题

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

输出

array (size=1)
      'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=46)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
Ç, ?, ?, Ö, ?, Ü, ç, ?, ?, ö, ?, ü
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
array (size=1)
  'keywords' => string 'Ç, &#286;, &#304;, Ö, &#350;, Ü, ç, &#287;, &#305;, ö, &#351;, ü' (length=64)

Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü
注意:我是否有
mb_内部编码(“UTF-8”)这是您的解决方案

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

因此,要将它们解码回来,请使用
html\u entity\u decode()
函数:

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

你可以
var\u dump($\u POST)
请?@KimAlexander-我为您添加了它,所以,您是否看到您在输入中混合了字符和html编码字符?后端、前端和DB编码都是混乱的,因为有许多不同的语言。将
accept charset=“ISO-8859-1”
添加到对其排序的
表单中。答案如下。请检查我的答案,它与您的数据库没有任何共同之处,即输入格式问题。我没有将其添加到帖子中,因此正如您所说。编辑了这篇文章。我以前试过,但由于某些原因,它会导致其他语言出现问题,并且在运行MySQL查询时出现问题。上面添加了简单的解决方案,请参见我的答案。无论如何,谢谢你的帮助。
$str = 'Ç, &#286;, &#304;, Ö, &#350;, Ü, ç, &#287;, &#305;, ö, &#351;, ü';
var_dump($str);
var_dump(html_entity_decode($str));