Как я могу остановить str_replace, заменяя только часть имени файла? - PullRequest
1 голос
/ 12 июля 2011

Я просматриваю файл HTML, заменяя все ссылки на внешние файлы новыми, однако иногда это приводит к ошибкам.

Например: я хочу заменить все экземпляры styles.css на1.css и все экземпляры iestyles.css с 2.css в этом исходном коде:

<html>
  <link href="styles.css" />
  <link href="iestyles.css" />
</html>

После запуска str_replace("styles.css", "1.css", $html); исходный код выглядит следующим образом:

<html>
  <link href="1.css" />
  <link href="ie1.css" />
</html>

Поэтому, когда я запускаю второй запрос, он не меняет ссылку iestyles.css, потому что он больше не существует.Это можно обойти?Полагаю, я мог бы изобрести тщательно продуманное регулярное выражение, но нужно учесть множество переменных, потому что не весь код сформирован правильно.

Cheers

Ответы [ 5 ]

3 голосов
/ 12 июля 2011

Просто измените порядок: сначала замените iestyles.css на 2.css, а затем замените styles.css на 1.css.

Если вы уверены, что имя файла является единственным в пределах hrefАтрибут, вы также можете включить двойные кавычки "

$html = str_replace('"styles.css"', '"1.css"', $html);
$html = str_replace('"iestyles.css"', '"2.css"', $html);
0 голосов
/ 12 июля 2011

Вы можете сначала изменить 'iestyles.css'.

0 голосов
/ 12 июля 2011

Просто включите кавычки в вашу замену.

замените "styles.css" на "1.css"

0 голосов
/ 12 июля 2011

используйте preg_replace ();

preg_replace('|<link href="styles\.css" />|', '1.css', $html);

или просто добавьте двойные кавычки перед styles

str_replace('"styles.css', '"1.css', $html);
0 голосов
/ 12 июля 2011

Включение двойных кавычек (при условии, что все они используют двойные кавычки) должно работать.

str_replace('"styles.css"', '"1.css"', $html);
...