Substr ошибочные данные после обновления до PHP 7.3 - PullRequest
0 голосов
/ 08 мая 2019

Я недавно обновил 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 () теперь возвращают пустую строку, если строка равна длине начальных символов.

Не думаю, что это объясняет, почему код перестал работать.

Может кто-нибудь объяснить это поведение и узнать, как с этим справиться и заставить мою подстроку работать снова, как раньше?

...