0

我有一堆用户提供的数据,我用它们做最少的处理,例如用htmlentities(). 不幸的是,该数据可能是几种不同的编码之一(是的,以前应该将其规范化为 UTF-8,但现在有很多 TB 的数据,并且很难重新调整)。

最近,当某些文档拒绝显示,即使数据确实存在且没有日志错误或异常时,我感到相当惊讶。经过一些调试后,它看起来像(来自phpsh):

php> var_dump(htmlentities("Hello\xbdWorld", ENT_COMPAT, 'UTF-8'));
string(0) ""

php> var_dump(error_get_last());
NULL

我知道这里的问题是数据实际上是 ISO-8859-1 编码的,并且我告诉htmlentities()将其视为 UTF-8(我正在努力将所有内容都转换为 UTF-8,但这需要很长时间) . 我的问题只是错误处理太奇怪了(不存在)。追查这些问题变成了噩梦。有没有一种内置在 PHP 中的方法(例如,配置变量或其他东西)来使它比在错误状态下返回空字符串更令人惊讶?

如果没有,我正在考虑重新定义有问题的函数,使用override_function()或调用该函数并确保返回值有意义,如果没有,则抛出异常。我在这个非常有用的页面上找到了危险功能列表

4

1 回答 1

0

将您的 ISO-8859-1 数据转换为 UTF8 实际上并不需要很长时间。您可以通过循环utf8_encode()函数在 php 中自动执行该过程。该功能也可能对您解决当前在 UTF8 文档中显示 ISO 数据的问题非常有用。

于 2013-09-11T15:52:52.237 回答