Я недавно обновил PHP5.6 до 7.3.4, на моем сайте есть страница, содержащая таблицы данных с большим количеством вакансий.
Я загружаю свои DataTables, используя 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 () теперь возвращают пустую строку, если строка равна длине начальных символов.
Не думаю, что это объясняет, почему код перестал работать.
Может кто-нибудь объяснить это поведение и узнать, как с этим справиться и заставить мою подстроку работать снова, как раньше?