Я использую curl для получения html и сохранения его в $ content. Затем я пытаюсь str_replace, это не работает:
echo str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications','OK',$content);
Но когда я пытаюсь распечатать $ content и скопировать источник и снова сохранить его в $ content, он работает:
echo $ content; Затем я копирую печатную версию и сохраняю ее в $ content снова:
$content='It is <a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications';
С новым $ content работает надстройка выше.
Попытайтесь также поставить «\». Я думаю, что дело в этом. Я не думаю, что тег «style» не имеет ничего, что отличает его.
Мое предположение – дополнительные пробелы или новая линия или аналогичные, попробуйте заменить куски .. например
str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" ','OK',$content); str_replace('" style="cursor: default;">Dojo</a> Applications','OK',$content);
и попытайтесь разобраться, где он терпит неудачу, тогда вы можете отследить, почему
Это работает для меня:
<?php $content='it is <a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications'; echo str_replace('<a onclick="get_content(\'http://en.wikipedia.org\');" style="cursor: default;">Dojo</a> Applications','OK',$content);
Таким образом, у вас, вероятно, есть фактические строки в строках, и они не закодированы в одном формате, например, один из них – \n
(Linux), а другой – \r\n
(Windows). Вы можете нормализовать обе строки перед сравнением:
<?php $content = strtr($content, array( "\r\n" => PHP_EOL, "\r" => PHP_EOL, "\n" => PHP_EOL, ));
В любом случае PHP имеет отличные функции для обработки HTML . Я бы не рекомендовал регулярные выражения для задачи: они ненадежны и очень трудно получить почти право.