Intereting Posts
В PHP получает сообщение «Class» PDO «не найден» при попытке подключения к Oracle DB Добавление содержимого команды UNIX в тег div Название страны от php Получение списка имен друзей из MySQL Как избавиться от PHP Примечание: Неопределенный индекс: HTTPS в X на линии 123 Что означает ошибка «PHP Fatal error: не может вызвать перегруженную функцию для не-объекта»? Лог ошибок при попытке входа в систему с помощью Laravel 5.2 PHP: В чем разница между классом SimpleXMLElement () и SimpleXML_load_string ()? PHP выпадающий, каждый из которых надежен Laravel 5 viaRemember () всегда false Определение того, установлена ​​ли переменная во включенном файле в PHP php – mysql результаты с ошибкой ORDER & LIMIT без английского 404 настраиваемая ошибка страницы перенаправления не показывает отсутствующий URL-адрес файла MySQL ложно разрешает дублировать записи, когда одно из полей – NULL Возможно ли «избежать» имени метода в PHP, чтобы иметь имя метода, которое сталкивается с зарезервированным ключевым словом?

Я не могу заставить strpos работать с новой строкой

Я очень новичок в php и не могу понять, как это исправить. У меня есть форма и вы хотите передать ей некоторую строку и проверите ее с другим файлом. Он работает нормально, если все строки находятся в одной строке, но как только я вложу несколько строк строки, это не удастся.

У меня есть php-файл со следующим кодом:

<?php echo "<center><form method='post' enctype='multipart/form-data'>"; echo "<b></b><textarea name='texttofind' cols='80' rows='10'></textarea><br>"; echo "<input name='submit' type='submit' style='width:80px' value='Run' />"; echo "</form></center>"; $texttofind = $_POST['texttofind']; if(get_magic_quotes_gpc()) { $texttofind = stripslashes($texttofind); } $texttofind = html_entity_decode($texttofind); $s = file_get_contents ("/home/xxxxx/public_html/abc.txt"); if (strpos ($s, $texttofind) === false) { echo "not found"; } else echo "found"; ?> 

и в abc.txt, у меня есть

 dog cat rat 

Всякий раз, когда я открываю страницу php и набираю только собаку или кошку, все будет хорошо и показывается 'found' сообщение, но когда я набираю несколько строк, например «dog <enter on keyboard> cat» и нажмите кнопку «Отправить», он вернется с сообщение 'not found' .

Что не так с кодом или в любом случае адаптировать его, чтобы он мог искать несколько строк?

Заранее спасибо.

 <?php $values=explode("\n",$txttofind); foreach($values as $value) { if (strpos ($s, $value) === false) { echo "$value : not found <br>"; } else { echo "$value : found <br>"; } } ?> 

Когда вы размещаете свои поисковые слова на новых строках, вы добавляете символы, которых нет в файле сравнения. Например, когда вы вводите …

кошачья собака

Вы действительно отправляете строку, которая выглядит как …

"Собака \ NCAT \ nrat"

Где \ n означает символ 13 или стандартный символ без окон. Исправить это зависит от того, что вы хотите сделать. Вы можете искать результаты с помощью функции разрыва PHP, чтобы преобразовать входную строку в массив, а затем получить позиции для каждого слова …

 $inputs = explode("\n", $_POST['field']); $positions = array(); foreach($inputs as $val) $positions[] = str_pos($compareTo, $val); 

Теперь $ position должно быть массивом str_pos, где найдена для каждой строки.

Если вы все еще пытаетесь найти, что в файле сравнения есть весь текст, вам просто все равно, будет ли он на новой строке или нет, вы можете просто разделить все символы строки вместе (также удалите \ r, чтобы быть безопасно)

 $inputs = str_replace("\n", "", $_POST['field']); $inputs = str_replace("\r", "", $inputs); 

Теперь входные данные будут «dogcatrat». Вы можете использовать второй аргумент str_replace, чтобы задать пробел вместо \ n, чтобы вернуться в список, разделенный пробелом.

 $inputs = str_replace("\n", " ", $_POST['field']); $inputs = str_replace("\r", "", $inputs); 

Да, мы все еще игнорируем все вместе (глупые окна). Тем не менее, я предлагаю прочитать информацию о том, как использовать массив, explode & implode и str_replace. Многие будут комментировать это и сообщать вам, что str_replace плохой, и что вы должны изучать регулярное выражение. Как опытный разработчик, я нахожу очень мало случаев, когда замены регулярных выражений обеспечивают лучшую функциональность в простой замене символов, и это заставит вас изучить совершенно новый язык команд. Пока игнорируем тех, кто говорит вам использовать регулярное выражение, но обязательно изучите регулярное выражение в ближайшем будущем. В конце концов вам это понадобится, просто не для чего-то такого.

http://php.net/manual/en/language.types.array.php

http://php.net/manual/en/function.explode.php

http://php.net/manual/en/function.implode.php

http://php.net/manual/en/function.str-replace.php

http://php.net/manual/en/function.preg-match.php