0

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

我使用 AJAX 加载我的数据表。在这个函数中,我有以下代码:

    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 等于 start characters long。

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

谁能解释这种行为并知道如何处理这个问题并让我的子字符串像以前一样再次工作?

4

0 回答 0