我正在使用一个我真的很喜欢的古老的wordpress主题,并且我只有一些基本的编码技能。我的提供商强行将服务器php版本升级到7.2,当然我的一些脚本也崩溃了。
public function localize( $handle, $object_name, $l10n ) {
if ( $handle === 'jquery' )
$handle = 'jquery-core';
if ( is_array($l10n) && isset($l10n['l10n_print_after']) ) { // back compat, preserve the code in 'l10n_print_after' if present
$after = $l10n['l10n_print_after'];
unset($l10n['l10n_print_after']);
}
foreach ( (array) $l10n as $key => $value ) {
if ( !is_scalar($value) )
continue;
$l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');
}``
根据日志,错误出现在最后一行,因为它显然像是“无法将空字符串分配给字符串偏移量”
也许这比更改一件简单的事情要复杂得多。...对此有任何解决方案?
答案 0 :(得分:0)
这里最合乎逻辑的事情是将其更改为在in_array条件下更新:
if ( is_array($l10n){
if(isset($l10n['l10n_print_after']) ) { // back compat, preserve the code in 'l10n_print_after' if present
$after = $l10n['l10n_print_after'];
unset($l10n['l10n_print_after']);
}
foreach ($l10n as $key => $value ) {
if ( !is_scalar($value) )
continue;
$l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');
}
}
即使将(array)$l10n
转换为数组,也不会将变量本身设置为数组(例如$l10n = (array)$l10n
)。
也就是说,使用混合类型确实很麻烦。最好只发送数组或先处理数组位,这样您就可以保持一致的类型。像这样:
public function localize( $handle, $object_name, $l10n ) {
//normalize arguments
if(!is_array($l10n)) $l10n = [$l10n];
if ( $handle === 'jquery' )
$handle = 'jquery-core';
if ( isset($l10n['l10n_print_after']) ) { // back compat, preserve the code in 'l10n_print_after' if present
$after = $l10n['l10n_print_after'];
unset($l10n['l10n_print_after']);
}
foreach ($l10n as $key => $value ) {
if ( !is_scalar($value) )
continue;
$l10n[$key] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8');
}
}
答案 1 :(得分:-1)
解决此问题的另一种可能方法是,如果服务器可以执行此操作,则强制服务器运行旧版本的php。例如,使用pantheon.io,您可以强制服务器在服务器配置文件中运行特定版本的php。
除非您想现代化所有脚本,然后忽略它。