我正在用JAVA和PHP开发一个应用程序。
我从JAVA类调用php文件,php在ddbb中执行查询并返回结果。问题是它没有正确返回字符。我想使用UTF-8,我的php文件的开头有:
header(“内容类型:text/html;charset=utf-8”);
但没用。如果我直接输入一个带有奇怪字符的单词,并且我确实回显,那么这个单词看起来是正确的,但是如果我从ddbb中提取了它们,它就不会。
函数mb_internal_encoding返回ISO-8859-1,但如果我将其设置为utf-8,则也不起作用
我不知道我是否正确地解释了这个问题,对不起我的英语。
谢谢

最佳答案

如果您有php 5.3.6,您应该更喜欢以下方法+

$pdo = new PDO("mysql:host=localhost;dbname=world;charset=utf8", 'my_user', 'my_pass');

原因是,否则,字符串转义将无法正确处理。这一点很重要,因为php仍然默认为mysql模拟准备好的语句,因此,它非常依赖内部的real_escape_字符串来识别正确的字符集。通过"SET NAMES ..."设置字符集不会更新real_escape_string使用的内部字符集设置。
小结:如果不使用上述方法,则可能容易受到sql注入攻击。我说可以,因为这取决于初始字符集和最终字符集。
或者,可以将pdo配置为不模拟准备好的语句。
参考:
http://www.php.net/manual/en/mysqlinfo.concepts.charset.php

10-01 07:57
查看更多