这可能是一个非常简单的问题,但我找不到任何相关信息。
我使用的系统会聚合来自各种来源的大量数据,然后将这些数据存储在数据库中。在大多数情况下,系统运行良好,但偶尔我们会遇到一个问题,即数据可能具有我们的系统不喜欢的笨拙字符编码(例如,当数据使用另一种语言,如法语)。
数据被传递到我们的处理服务器(我们使用 Gearman),为了确保与源相关的所有信息都被传递,我们对一个包含我们需要的一切的数组进行 json_encode 编码。我的问题是:如果我将 json_encode 包装在 try/catch block 中,导致“PHP 警告:json_encode():参数中的无效 UTF-8 序列”消息的事情是否会触发 catch block 激活?
谢谢!
不,但您可以在函数中检查它的返回值,并在出现问题时抛出异常。您也可以使用 json_last_error
获取有关错误的详细信息
例子:
function my_json_encode($data) {
if( json_encode($data) === false ) {
throw new Exception( json_last_error() );
}
}
try {
my_json_encode($data);
}
catch(Exception $e ) {
// do something
}
我确实发现非常烦人的是,要获得实际的错误消息,您必须检查从 json_last_error()
返回的常量列表。过去我使用 switch/case 语句来实现这一点,但您可以根据错误抛出不同的异常。