#php #str-replace
#php #str-replace
Вопрос:
Я использую curl для получения html и сохранения его в $content. Затем я пробую str_replace, это не работает:
echo str_replace('<a onclick="get_content('http://en.wikipedia.org');" style="cursor: defau<">Dojo</a> Applications','OK',$content);
Но когда я пытаюсь напечатать $ content и скопировать исходный код и снова сохранить его в $ content, это работает:
echo $content; Затем я копирую распечатанное и снова сохраняю его в $ content:
$content='It is <a onclick="get_content('http://en.wikipedia.org');" style="cursor: defau<">Dojo</a> Applications';
С новым $content вышеуказанная замена работает.
Комментарии:
1. У меня это работает — PHP 5.3.2-1ubuntu4.5
2. это работает .. codepad.org/6SLzSaLW
3. Повторная публикация вопроса не изменит того факта, что вы не продемонстрировали, как воспроизвести проблему. Если мы не сможем воспроизвести это, мы не сможем это исправить.
Ответ №1:
Попробуйте также вставить ‘»‘. Я думаю, что дело в этом. Я не думаю, что в теге «style» нет ничего, что имело бы значение.
Комментарии:
1. спасибо, иногда мне трудно думать по-английски, когда обычно я думаю по-испански
Ответ №2:
Я предполагаю, что это дополнительные пробелы или новая строка или что-то подобное, попробуйте заменить фрагменты .. например
str_replace('<a onclick="get_content('http://en.wikipedia.org');" ','OK',$content);
str_replace('" style="cursor: defau<">Dojo</a> Applications','OK',$content);
и попробуйте выяснить, где происходит сбой, тогда вы сможете отследить причину
Комментарии:
1. И тогда вы можете использовать манипуляции с DOM вместо хакерской замены неработающей строки.
Ответ №3:
Это работает для меня:
<?php
$content='it is <a onclick="get_content('http://en.wikipedia.org');" style="cursor: defau<">Dojo</a> Applications';
echo str_replace('<a onclick="get_content('http://en.wikipedia.org');" style="cursor: defau<">Dojo</a> Applications','OK',$content);
Таким образом, у вас, вероятно, есть фактические переводы строк внутри строк, и они не закодированы в одном формате, например, один — n
(Linux), а другой — rn
(Windows). Вы можете нормализовать обе строки перед сравнением:
<?php
$content = strtr($content, array(
"rn" => PHP_EOL,
"r" => PHP_EOL,
"n" => PHP_EOL,
));
В любом случае PHP обладает отличными функциями для обработки HTML. Я бы не рекомендовал регулярные выражения для этой задачи: они ненадежны, и их очень трудно получить почти правильно.
Комментарии:
1. Пожалуйста, прочитайте мой обновленный вопрос. Я сомневаюсь, что $ content, который я получил с помощью curl, отличается от того, что я вижу с echo $ content.
2. @user570494: Вы «видите» это с помощью «View Source» или из HTML-вывода вашего браузера? Возможно, вы не сможете правильно проанализировать пробелы из выходных данных HTML.
3. @user570494 — Когда вы печатаете содержимое, как вы видите точные символы окончания строки, содержащиеся в тексте? Ваш обновленный вопрос предполагает, что проблема именно в том, о чем я догадался.