Регулярное выражение PHP для изменения внутренних ссылок на абсолютные ссылки - PullRequest
0 голосов
/ 08 декабря 2011

Я ищу регулярное выражение в PHP, которое может заменить атрибут href тегов привязки и атрибут src IMG, стиля, сценариев и т. Д., Когда они являются внутренними.

пример: если я смотрю на страницу http://www.mysite.com и на этой странице есть изображение:

<img src="/images/picture.gif /> тогда я хочу изменить это на:

<img src="http://mysite.com/images/picture.gif />

То же самое для тегов привязки: <a href="otherpage.php" >foo</a> следует изменить на

<a href="http://mysite.com/otherpage.php" >foo</a>

Кроме того, он должен работать с другими элементами, имеющими атрибут src= или href=, и также должен работать с элементами, имеющими один или несколько других атрибутов (например, <img class="test" src="/images/picture.gif alt="some picture" />) * 1023. *

Я пробовал что-то вроде

preg_replace("/src=[\"']([\/])(.*)?[\"'] /", "src='".$domain."/$2'", $htmldata);

но это не сработало. Он принял атрибут src, но также захватил все атрибуты после src. Кроме того, он не захватывал строки, которые не начинались с / (например, src="image.png")

Ответы [ 4 ]

3 голосов
/ 08 декабря 2011

Я бы предложил сохранить их как «внутренние» ссылки и просто добавить HTML базовый тег .Надеемся, что предполагаемое использование позволяет использовать это решение.

РЕДАКТИРОВАТЬ: я (@ManseUK) изменил ссылку на сайт w3.org вместо w3schools w3fools.com - Надеюсь, ты не возражаешь ....

2 голосов
/ 08 декабря 2011

Измените жадность с помощью модификатора U и учтите нулевую начальную косую черту:

 /(?:src|href)\s*=\s*[\"\'](?:\/*)([\w\.]*)[\"\']/U

... и, поскольку вам не требуется src | href или начальная косая черта в качестве обратной ссылки, сопоставьте их, но пропустите с?:

Тогда имя изображения становится $ 1 вместо $ 2.

Я использую модификатор U для всего шаблона, потому что, когда?иначе присутствует как в?: и мне не нужна дополнительная детализация, мои глаза видят это более четко.

Хотя, как уже отмечали другие, выполнение этого с помощью регулярных выражений, вероятно, не лучший ответ...:)

0 голосов
/ 08 декабря 2011
$url = 'http://domain.com/';
$result = preg_replace('/(?<=href=[\'"]|src=[\'"])\/?/', $url.'$1', $input);
0 голосов
/ 08 декабря 2011

попробуйте этот шаблон

(src|href)\s*=\s*[\'\"]\/(.*?)[\'\"]
...