У меня есть текстовый файл, и я хочу проверить, содержит ли файл строку wor"dddddd
, Предположим, что это содержимое текстового файла:
...,sometext,moretext,wor"dddddd,867767,3468647,sometext,...
Вот мой код, я не знаю, почему он не работает (печатает 8 вместо 3):
<?php
$id='wor\"dddddd';
$fopen = fopen("file.txt", 'r');
$content= htmlspecialchars(file_get_contents("file.txt"));//
$split=explode(",", $content);
$arr_len=count($split);
$pos=0;
$result=array();
//finding the position of the word in the array
foreach ($split as $x){
if(stripos($id, $x)!==false) {
break;}
$pos++;
}
echo $pos;//should print 3, but it prints 8 i.e it's not find the word wor"dddddd
?>
Я не знаю, почему, если внутри слова есть кавычка, которую он не находит, я попытался добавить обратную косую черту \
(строка 2 в моем коде), как вы можете видеть, но все равно вывод 8. Что мне делать, если я знаю, что слово, которое я хочу найти в текстовом файле, содержит кавычку?
Здесь у вас есть пара или ошибки.
Сначала в строке
$id='wor\"dddddd';
Вам не нужно убегать "
в строке в одинарных кавычках. Итак, вы пытаетесь найти 'wor\"dddddd'
вместо 'wor"dddddd'
, Очевидно, что этого не произойдет.
Следующая ошибка возникает при использовании htmlspecialchars
,
Эта функция превратит кавычки в html-сущности, поэтому вместо wor"dddddd
у тебя будет wor"dddddd
, Опять же, вы можете найти wor"dddddd
когда у тебя есть wor"dddddd
,
Итак, решение:
$id = 'wor"dddddd';
$content= file_get_contents("file.txt");
// following lines remain unchanged
Бонус: Вы можете заменить цикл $split
с одной строкой:
$pos = array_search($id, $split);
Других решений пока нет …