Я очень новичок в 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