我有一堆用户提供的数据,我用它们做最少的处理,例如用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()
或调用该函数并确保返回值有意义,如果没有,则抛出异常。我在这个非常有用的页面上找到了危险功能列表