Intereting Posts
Как я могу использовать gzip для своих веб-файлов Каков самый простой способ получить соотношение в PHP нескольких чисел? Как Заменить каталог в PHP? PHPUnit не может найти класс TestCase Ошибка «Font_Glyph_Outline» при использовании WebFonts с DOMPDF Как читать определение функции в руководстве по PHP CodeIgniter все страницы перенаправляются на главную страницу? Вход в систему Системный дизайн, позволяющий каждому пользователю регистрироваться на одной машине за раз php string сравнение неожиданный тип жонглирование warning: stream_socket_client (): невозможно установить файл закрытого ключа Как получить список групп facebook для пользователя с помощью графика api как сделать содержимое таблицы wil автоматически отображаемым в всплывающей форме Сортировка результатов запроса mysql PHP и перечисления Как создать флажок «Запомнить меня» с помощью библиотеки сеансов Codeigniter?

Найти несколько строк в PHP

Я пишу PHP-страницу, которая анализирует данный URL. Я могу только найти первое вхождение, но когда я его повторяю, я получаю другое значение, а не данное.

это то, что я делал до сих пор.

<?php $URL = @"my URL goes here";//get from database $str = file_get_contents($URL); $toFind = "string to find"; $pos = strpos(htmlspecialchars($str),$toFind); echo substr($str,$pos,strlen($toFind)) . "<br />"; $offset = $offset + strlen($toFind); ?> 

Я знаю, что цикл можно использовать, но я не знаю условия, ни тело цикла.

И как я могу показать результат, который мне нужен?

Related of "Найти несколько строк в PHP"

Это происходит потому, что вы используете strpos на htmlspecialchars($str) но вы используете substr на $str .

htmlspecialchars() преобразует специальные символы в объекты HTML. Возьмите небольшой пример:

 // search 'foo' in '&foobar' $str = "&foobar"; $toFind = "foo"; // htmlspecialchars($str) gives you "&amp;foobar" // as & is replaced by &amp;. strpos returns 5 $pos = strpos(htmlspecialchars($str),$toFind); // now your try and extract 3 char starting at index 5!!! in the original // string even though its 'foo' starts at index 1. echo substr($str,$pos,strlen($toFind)); // prints ar 

Чтобы исправить это, используйте одну и ту же стопку в обеих функциях.

Чтобы ответить на другой вопрос об обнаружении всех вхождений одной строки в другую, вы можете использовать третий аргумент strpos , offset, который определяет, где искать. Пример:

 $str = "&foobar&foobaz"; $toFind = "foo"; $start = 0; while($pos = strpos(($str),$toFind,$start) !== false) { echo 'Found '.$toFind.' at position '.$pos."\n"; $start = $pos+1; // start searching from next position. } 

Вывод:

Найден foo в позиции 1
Найден foo в позиции 8

Использование:

 while( ($pos = strpos(($str),$toFind,$start)) != false) { 

Explenation: Set ) после false за $start) , так что $pos = strpos(($str),$toFind,$start) помещается между () .

Также используйте != false False, потому что php.net говорит: «Эта функция может возвращать Boolean FALSE , но может также возвращать небулевое значение, которое оценивается как FALSE , например 0 или "" . Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

 $string = '\n;alskdjf;lkdsajf;lkjdsaf \n hey judeee \n'; $pattern = '\n'; $start = 0; while(($newLine = strpos($string, $pattern, $start)) !== false){ $start = $newLine + 1; echo $newLine . '<br>'; } 

Это срабатывает из ворот и не запускает бесконечный цикл, как указано выше, а символ! == позволяет совпадение в позиции 0.

 $offset=0; $find="is"; $find_length= strlen($find); $string="This is an example string, and it is an example"; while ($string_position = strpos($string, $find, $offset)) { echo '<strong>'.$find.'</strong>'.' Found at '.$string_position.'</br>'; $offset=$string_position+$find_length; }