为 htmlspecialchars 兼容性转换数据库数据

Converting DB data for htmlspecialchars compatibility

所以,我的服务器最近升级到 PHP 5.5,而 htmlspecialchars() 对某些输入返回空白。这是因为 PHP 将函数更改为默认使用 UTF-8 编码字符串。

与其在我的多个大型网站中更改 htmlspecialchars 的每个实例,不如……我希望在字符串到达​​此函数之前对其进行转换。即,在 mysql 数据库中。我的应用程序是一个内部 MVC 框架,因此它将数据从数据库加载到文章 class 中。然后 class 对象在站点的各个页面中使用,如下所示: echo( htmlspecialchars( $article->title ) );等等

我的 mysql 数据库目前正在使用带有 latin1_general_ci 排序规则的 MyISAM tables。

当我使用 PHPMyAdmin 将文章 table 的排序规则更改为 utf8_unicode_ci .... 它仍然没有解决问题。我不明白为什么数据现在不是 htmlspecialchars 的正确编码?

有什么建议吗?

(注意,我知道重写 htmlspecialchars 函数的运行时解决方案是一种变通方法,但这在我的共享主机上是不可能的。

我也知道我可以在整个网站上搜索和替换以将所需的编码传递给函数的每次出现,但由于我的网站很大并且其中几个已编码/经过其他构建过程,更改这么多文件是行不通的。 )

谢谢!

试试这个 :)

$bdd = new PDO('mysql:host=YOURHOST;dbname=DATABASE', 'USER', 'PASSWORD', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

我用那个,效果很好 :)

所以...一些修补表明,将我的数据库连接对象的字符集设置为 utf8,修复它,即使数据库表仍然是 latin1_general_ci。这适用于读取和写入数据库,因此转换必须正确进行。

$dbc->set_charset("utf8");  // Using mysqli built in PHP library.

注意 - 我只使用英语和法语字符。

我将使用它(以及将 HTML 页眉字符集设置为 utf-8)作为临时解决方案,直到我可以将我的应用程序的主副本转换为在所有地方使用 utf-8。