php 7.2升级错误“无法将空字符串分配给字符串偏移量”

时间:2019-01-02 21:28:51

标签: php wordpress

我正在使用一个我真的很喜欢的古老的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');
    }``

根据日志,错误出现在最后一行,因为它显然像是“无法将空字符串分配给字符串偏移量”

也许这比更改一件简单的事情要复杂得多。...对此有任何解决方案?

2 个答案:

答案 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。

除非您想现代化所有脚本,然后忽略它。