字符 encoding/decoding returns ?提交表单时出现迹象或奇怪的结果
Character encoding/decoding returns ? signs or weird results when form is submitted
我知道有很多类似的帖子,但到目前为止,尽管我浏览了它们,但我无法解决我的问题。当我点击 Search
按钮时,我试图打印准确的 search keywords
但不幸的是,我看到的是编码版本,我无法解码。我阅读了 utf8_decode and iconv 但到目前为止运气不好。我的网站使用了多种语言,但我只是在努力处理以下字符。
注意: 我在 MySQL 中使用 utf8mb4_unicode_ci
作为 collation
并且在 table 中插入了相同的关键字Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
所以由于编码差异,在大多数情况下搜索会失败。
我也将内部字符设置为 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 当 UTF-8 标签在 EXIST
array (size=1)
'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=46)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
Ç, ?, ?, Ö, ?, Ü, ç, ?, ?, ö, ?, ü
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
OUTPUT When UTF-8 tag in REMOVED
// This will also break front-end for certain characters.
array (size=1)
'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=64)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü
你在PHP中设置了内部编码吗? mb_internal_encoding("UTF-8");
如果前后端都使用UTF-8,应该没有问题!
添加 accept-charset="ISO-8859-1"
到表单元素解决了问题。
输出
array (size=1)
'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=64)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü
注:我有没有mb_internal_encoding("UTF-8");
不影响结果
这是您的解决方案。
根据您提供的数据,您混合了纯字符和 html 编码字符的字符串。
所以要解码它们回来使用html_entity_decode()
函数:
$str = 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü';
var_dump($str);
var_dump(html_entity_decode($str));
我知道有很多类似的帖子,但到目前为止,尽管我浏览了它们,但我无法解决我的问题。当我点击 Search
按钮时,我试图打印准确的 search keywords
但不幸的是,我看到的是编码版本,我无法解码。我阅读了 utf8_decode and iconv 但到目前为止运气不好。我的网站使用了多种语言,但我只是在努力处理以下字符。
注意: 我在 MySQL 中使用 utf8mb4_unicode_ci
作为 collation
并且在 table 中插入了相同的关键字Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
所以由于编码差异,在大多数情况下搜索会失败。
我也将内部字符设置为 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 当 UTF-8 标签在 EXIST
array (size=1)
'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=46)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
Ç, ?, ?, Ö, ?, Ü, ç, ?, ?, ö, ?, ü
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
OUTPUT When UTF-8 tag in REMOVED
// This will also break front-end for certain characters.
array (size=1)
'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=64)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü
你在PHP中设置了内部编码吗? mb_internal_encoding("UTF-8"); 如果前后端都使用UTF-8,应该没有问题!
添加 accept-charset="ISO-8859-1"
到表单元素解决了问题。
输出
array (size=1)
'keywords' => string 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü' (length=64)
Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü
?, Ğ, İ, ?, Ş, ?, ?, ğ, ı, ?, ş, ?
Ç, Ğ, İ, Ö, Ş, Ãœ, ç, ğ, ı, ö, ş, ü
注:我有没有mb_internal_encoding("UTF-8");
不影响结果
这是您的解决方案。
根据您提供的数据,您混合了纯字符和 html 编码字符的字符串。
所以要解码它们回来使用html_entity_decode()
函数:
$str = 'Ç, Ğ, İ, Ö, Ş, Ü, ç, ğ, ı, ö, ş, ü';
var_dump($str);
var_dump(html_entity_decode($str));