我最近已从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为 等于开始字符长。
我不认为这可以解释为什么代码停止工作。
任何人都可以解释这种行为,知道如何处理并让我的子字符串像以前一样再次工作吗?