升级到PHP 7.3后Substr错误数据表

时间:2019-05-08 17:01:06

标签: php datatable substring php-7 php-7.3

我最近已从PHP5.6升级到7.3.4,在我的网站上,我的页面上有一个包含大量空缺的数据表。

我使用AJAX加载DataTables。在此功能中,我具有以下代码:

    if (strlen($vac->name) > 19) {
                $vacname = substr($vac->name, 0, 18) . "...";
            } else {
                $vacname = $vac->name;
            }

            if (!empty(LOCATION)) {
                $vacNameUrl = '<a href="'.localized_base_url() . strtolower(LOCATION) . "/" . lang("url_voluntary_work_detail") . $slug . "/" . $vac->vacancy_id.'">'.$vacname.'</a>';
            } else {
                $vacNameUrl = '<a href="'.localized_base_url() . lang("url_voluntary_work_detail") . $slug . "/" . $vac->vacancy_id.'">'.$vacname.'</a>';
            }
            ...
            $obj->title = $vacNameUrl;

以及其他一些代码,用于填充DataTables列中的某些变量。

这在php 5.6上效果很好。 升级后,我们注意到(我仍然不确定为什么,我无法查明)我的数据表将返回一条警告消息,并带有一条错误消息,指出JSON不正确。

经过大量调试,我们发现如果将代码更改为:

 if (strlen($vac->name) > 19) {
      //$vacname = substr($vac->name, 0, 18) . "...";
      $vacname = $vac->name;
 } else {
      $vacname = $vac->name;
 }

DataTables将像以前一样再次工作。我知道像我上面粘贴的IF不再有意义,但是我希望再次具有与以前相同的功能,将长字符串切掉,并在末尾附加三个点。

我尝试阅读PHP更改日志以了解substr的任何更改,但是我唯一能找到的是:

  

substr()和iconv_substr()现在返回一个空字符串,如果string为   等于开始字符长。

我不认为这可以解释为什么代码停止工作。

任何人都可以解释这种行为,知道如何处理并让我的子字符串像以前一样再次工作吗?

0 个答案:

没有答案