Устарело: strpos(): в будущем иглы, не являющиеся строками, будут интерпретироваться как строки. Используйте явный вызов chr(), чтобы сохранить текущее поведение в

Привет всем, кто может помочь мне с этим, спасибо

  public function get_statement($t, &$contents)
{
   
    // Locate the statement
    $tag_length = strlen($t['b']);
    $fpos = strpos($contents, $t['b']) + $tag_length;
    $lpos = strpos($contents, $t['e']);
    $length = $lpos - $fpos;

    // Extract & return the statement
    return substr($contents, $fpos, $length);
}

выдает ошибку: Устарело: strpos(): в будущем нестроковые иглы будут интерпретироваться как строки. Используйте явный вызов chr(), чтобы сохранить текущее поведение в


php
person Leon Ca    schedule 08.08.2020    source источник
comment
Вы должны определить, что содержит $t.   -  person user3783243    schedule 08.08.2020
comment
^ Кроме того, вы должны указать, что вы пытаетесь архивировать. Вот ваш фрагмент, который дает ошибки, но мы не знаем ни ваших данных, ни желаемого ввода и вывода.   -  person Chris S.    schedule 08.08.2020


Ответы (2)


Решение, которое сработало:

    public function get_statement($t, &$contents)
    {
        // Locate the statement
        $tag_length = strlen($t['b']);
        if (!empty($t['b'])) {
            $fpos = strpos($contents, (string)$t['b']) + $tag_length;
        }
        if (!empty($t['e'])) {
            $lpos = strpos($contents, (string)$t['e']);
        }
        $length = $lpos - $fpos;
        // Extract & return the statement
        return substr($contents, $fpos, $length);
    }
person Leon Ca    schedule 08.08.2020

Привет и добро пожаловать в stackoverflow!

Согласно php.net:

Передача иглы, не являющейся строкой, функциям поиска строк не рекомендуется.

Итак, начиная с php 7.3, когда вы вызываете strpos($haystack, $needle, $offset), вы должны быть уверены, что второй параметр $needle является string.

В большинстве случаев вы можете просто привести его к такой строке strpos($haystack, (string)$needle, $offset)

Возвращаясь к вашему примеру кода, попробуйте исправить это следующим образом:

public function get_statement($t, &$contents)
{
   
    // Locate the statement
    $tag_length = strlen($t['b']);
    $fpos = strpos($contents, (string)$t['b']) + $tag_length;
    $lpos = strpos($contents, (string)$t['e']);
    $length = $lpos - $fpos;

    // Extract & return the statement
    return substr($contents, $fpos, $length);
}
person krylov123    schedule 08.08.2020
comment
Я пробовал это раньше и взамен получил предупреждение: strpos (): пустая игла и спасибо за вашу помощь :) - person Leon Ca; 08.08.2020
comment
Это означает, что иногда вы получали здесь null или false. Например, если вы что-то анализируете, возможно, скрипт не находит то, что должно быть, и передает значение false функции get_statement. Так что проблема не в этой функции. - person krylov123; 08.08.2020
comment
Я не понял разницы с моим ответом. Если есть разница - опубликуйте свой код как ответ, а не как комментарий. Если нет разницы - то мой ответ выбираете как правильный для будущих пользователей. - person krylov123; 08.08.2020
comment
Хорошо, я нашел, вы проверяете if (!empty($t['b']) { } - person krylov123; 08.08.2020