升级PHP和MySQL后,Htmlentities函数返回null

时间:2015-03-25 14:18:16

标签: php mysql html-entities php-5.5 mysql-5.6

我有一个Web服务器,在PHP 5.2.3,Apache 2.2.4,MySQL 5.0.37(具有utf8_general_ci字符集的数据库)上开发了一百个应用程序。

我设置了一台新机器,我将移植到具有PHP 5.5.12(default_charset = UTF-8),Apache 2.4.9(带有content="text/html; charset=utf-8"的html头,MySQL 5.6.17)的Web服务器(使用utf8_general_ci字符集测试数据库。

在PHP脚本中我多次使用htmlentities函数的形式,如 htmlentities($ var)(不是最好的方法,但我是初学者),其中$ var是从MySQL中提取的文本,包含像“è”这样的特殊字符(当我在dbase中保存时,我使用 set var =_utf8'è')。

问题是在新服务器上htmlentities函数什么都不返回(旧服务器中的相同代码返回正确的&egrave)。

经过一些谷歌搜索后,我找到了一个解决方案,将该呼叫重写为 htmlentities(utf8_encode($ var)),但你知道要纠正一百个应用程序......

有一个解决方案(使用.ini变量,数据库字符集修改或类似)来维护htmlentities函数的“旧”功能吗?

[编辑] 感谢CBroe的建议,我可以使用连接到DB(一个常用函数)时调用的函数mysql_set_charset来解决与MySQL相关的问题。

但是,问题仍然存在于通用转换中。例如,如果我想打印欧元符号,我想使用htmlentities函数来记住html代码。

另外注意如果我使用htmlentities(“è”,ENT_QUOTES,'UTF-8'),结果什么都没有,如果我使用htmlentities(“è”,ENT_QUOTES,'ISO-8859-1')或htmlentities( “è”,ENT_QUOTES,'')结果是对的。

PS:

如果我传递一个带有像“abcdè”这样的特殊字符串的字符串,问题就是一样。

[编辑] 我在ODBC连接上找到了同样问题的解决方案: https://www.saotn.org/php-56-default_charset-change-may-break-html-output/ 所以设置 default_charset =“iso-8859-1”旧的应用程序仍然可以正常工作。

0 个答案:

没有答案