我有一个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
函数什么都不返回(旧服务器中的相同代码返回正确的è
)。
经过一些谷歌搜索后,我找到了一个解决方案,将该呼叫重写为 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”旧的应用程序仍然可以正常工作。