[英]Handling character encoding from Java to PHP to MySQL
在Java中,我将String
传递给PHP。
在PHP中,我使用该String并使用MySQL
查询进行搜索。
这是PHP代码:
$query = $database->escape_value(trim($_POST['query']));
$result = mysqli_query($dbconnection, Data::getSearchQuery($query));
while ($row = mysqli_fetch_assoc($result)) {
$output[] = $row;
}
print(json_encode($output));
mysqli_close($dbconnection);
public static function getSearchQuery($item_query) {
$query = "
SELECT i.item, i.item_id, c.category, c.cat_id
FROM items as i
LEFT JOIN master_cat AS c
ON (c.cat_id = i.cat_id)
WHERE i.item LIKE '%{$item_query}%'
ORDER BY i.item ASC;";
return $query;
}
如果我在美国键盘上使用常规字符,这将始终有效。 但是从我开始使用不规则字符的那一刻起,搜索就变成了空白。
我可以验证MySQL
是否在用户输入数据时存储了数据。 因此,如果他们键入Beyoncè
,则数据库Beyoncè
这种方式存储它。
但是,当我在上面的代码中搜索Beyoncè
(或其他)时,它返回空。
我应该如何处理字符。 在这里编码?
需要考虑三点:
1) $item_query
变量的编码可能错误。
2)>> 我可以验证MySQL是否在用户输入时存储了数据
这可能会很棘手。 如果将iso8859-1编码的字符串写入utf-8数据库,则该字符串显然存储不正确。 如果使用配置为iso8859-1的客户端(即phpmyadmin或mysql命令行工具)读取该字符串,则将正确返回该字符串-尽管它在数据库中的表示形式显然是错误的。
3)MySql设置:您是否为连接本身设置了utf-8? 数据库/表的字符集和排序规则如何?
https://dev.mysql.com/doc/refman/5.5/en/charset-syntax.html
更新:我假设您希望一切都为UTF-8。 可以快速测试的种类:
Beyoncé
( Beyoncé
有7个字符(请参阅MySQL CHAR_LENGTH函数) Beyoncé
。 这导致以下诊断测试...
PHP发行的SQL命令
"SELECT CHAR_LENGTH($item_query), LENGTH($item_query);"
然后应返回(7,8)的结果,以表明$ item_query变量可能已正确编码,并且数据库喜欢UTF-8 。 (7,7)表示$ item_query不是UTF-8,而(8,8)表示数据库还不想处理UTF-8。 如果是后者,则发出SET NAMES 'UTF8';
查询之前。
同样,PHP发出的SQL命令
SELECT CHAR_LENGTH('Beyoncé'), LENGTH('Beyoncé');
应该返回结果(7,8),向我们显示您的PHP编辑器已配置为编辑UTF-8 php文件 。
对phpmyadmin(或任何SQL客户端)重复上一步,以确保该客户端也使用UTF-8 。
尚未涉及任何表格! SQL命令
SELECT CHAR_LENGTH(somecolumn), LENGTH(somecolumn) FROM sometable;
(使用具有UTF-8字符编码的sometable和包含一些变音字符的somecolumn)应该告诉您在将值存储到表时是否使用了UTF-8 。
如果以前的所有测试均通过,请再次使用LIKE进行测试。 甚至'Beyoncé' LIKE 'Beyonce'
这样的'Beyoncé' LIKE 'Beyonce'
应该可以工作。 有关更多信息,请使用Google MySQL排序规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.