这可能是一个非常简单的问题,但我找不到任何关于它的信息.
我使用的系统聚合了来自各种来源的大量数据,然后将这些数据存储在数据库中.在大多数情况下,系统工作正常,但偶尔我们会遇到一个问题,即数据可能有尴尬的字符编码(例如,当数据是另一种语言,如法语时),我们的系统不喜欢.
数据传递给我们的处理服务器(我们使用Gearman),并确保传递与源有关的所有信息,我们json_encode一个包含我们需要的所有内容的数组.我的问题是:如果我将json_encode包装在try/catch块中,会导致"PHP警告:json_encode():参数中的无效UTF-8序列"消息会触发catch块激活吗?
谢谢!
不,但您可以在函数中检查它的返回值,并在出现问题时抛出异常.您还可以使用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
}
Run Code Online (Sandbox Code Playgroud)
我觉得非常烦人的是,要获得实际的错误消息,你必须检查从中返回的常量列表json_last_error().在过去,我使用了switch/case语句来实现这一点但是你可以根据错误抛出不同的异常.