1

我正在用 JAVA 和 PHP 开发一个应用程序。我从 JAVA 类调用 php 文件,php 在 ddbb 中执行查询并返回结果。问题是它没有正确返回字符。我想使用 UTF-8,我在我的 php 文件的开头有这个: header("Content-type: text/html; charset=utf-8"); 但它不起作用。如果我直接用奇怪的字符输入一个单词,然后回显,则该单词会正确显示,但如果我从 ddbb 中获取它们,则不会。

函数 mb_internal_encoding 返回 ISO-8859-1 但如果我将其设置为 utf-8 也不起作用

我不知道我是否正确解释了这个问题,对不起我的英语。

谢谢

4

2 回答 2

1

在你的 PDO 中试试这个:

$dbInfos = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'");

$this->connection = new PDO($this->dsn, $this->username, $this->password, $dbInfos);
于 2012-06-18T17:34:32.413 回答
1

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

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

原因是否则,将无法正确处理字符串转义。这很重要,因为 php 仍然默认为 mysql模拟准备好的语句,因此,它非常依赖于内部 real_escape_string 能够识别正确的字符集。通过设置字符集"SET NAMES ..."不会更新 real_escape_string 使用的内部字符集设置。

摘要:如果不使用上述方法,您可能容易受到sql注入攻击。我说可能,因为它取决于初始和最终字符集。

或者,您可以将 pdo 配置为不模拟准备好的语句。

参考: http ://www.php.net/manual/en/mysqlinfo.concepts.charset.php

于 2012-06-18T18:46:43.057 回答