转换数据库数据以获得htmlspecialchars兼容性

时间:2015-12-09 20:48:47

标签: php mysql utf-8 htmlspecialchars

因此,我的服务器最近已升级到PHP 5.5,并且htmlspecialchars()为某些输入返回空白。这是因为PHP默认将函数更改为期望UTF-8编码的字符串。

而不是在我的多个大型网站中更改htmlspecialchars的每个实例...我希望在它们到达此功能之前转换字符串。即,在mysql数据库中。我的应用程序是一个内部MVC框架,因此它将数据从DB加载到Articles类中。然后类对象在网站上的各个页面中使用,如:echo(htmlspecialchars($ article-> title));等

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

当我使用PHPMyAdmin将Articles表上的排序规则更改为utf8_unicode_ci时....它仍然无法解决问题。我无法理解为什么数据现在不适合htmlspecialchars的编码?

有什么建议吗?

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

我也知道我可以在整个网站上搜索和替换,以便为每次出现的函数传递所需的编码,但由于我的网站很大,而且其中有几个已编码/经过其他构建过程,因此这很多文件都不是首发。 )

谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:)

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

我使用它并且工作相当不错:)

答案 1 :(得分:0)

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

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

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

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