升级Statamic后explode接收SimpleXMLElement参数报错如何解决
报错原因
simplexml_load_string()返回的SimpleXMLElement对象通过数组下标读取属性时,返回值为SimpleXMLElement类型而非原生字符串,不符合explode()函数要求第二个参数为字符串的输入约束- 若处理的SVG文件没有定义
viewBox属性,$svgObj['viewBox']会返回null,也会触发类型错误 - 升级Statamic后报错是因为新版本默认开启了更严格的PHP类型校验,旧版本中隐式类型转换会被静默忽略,不会抛出明确错误
修复方案
替换原代码中报错行及后续的viewBox取值逻辑,增加类型转换和合法性校验即可:
// 校验viewBox属性是否存在 if (!isset($svgObj['viewBox'])) { return; } // 强制将SimpleXMLElement属性转为原生字符串 $viewBoxStr = (string) $svgObj['viewBox']; $viewBox = explode(' ', $viewBoxStr); // 额外校验viewBox格式合法性,避免后续下标越界 if (count($viewBox) < 4) { return; } $viewBoxWidth = intval($viewBox[2]); $viewBoxHeight = intval($viewBox[3]);
内容的提问来源于stack exchange,提问作者Nathan Bayne
相关产品推荐
相关产品推荐

