我有一个 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 (html head with content="text/html; charset=utf-8"
, MySQL 5.6.17 (test database with utf8_general_ci
character set) 的 Web 服务器移植到该机器上。
在 PHP 脚本中,我多次以htmlentities($var)htmlentities
之类的形式使用该函数(好吧,这不是最好的方法,但我是初学者),其中 $var 是从 MySQL 中提取的文本并包含特殊字符,例如“è”(当我保存在我使用的数据库中set var=_utf8'è')。
问题是在新服务器上该htmlentities
函数不返回任何内容(旧服务器中的相同代码返回正确的è
)。
经过一番谷歌搜索后,我找到了一个将调用重写为htmlentities(utf8_encode($var))的解决方案,但你知道要更正一百个应用程序......
有一个解决方案(使用 .ini 变量、数据库字符集修改或类似的)来维护函数的“旧”htmlentities
功能吗?
mysql_set_charset
[编辑] 感谢CBroe的建议,我可以使用连接到数据库时调用的函数(一个常用函数)来解决与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"旧的应用程序仍然可以正常工作。