php: str_replace или preg_match? - PullRequest
       5

php: str_replace или preg_match?

0 голосов
/ 08 февраля 2012

Я пытаюсь создать скрипт, который преобразует все относительные пути в абсолютные.

. Как мне найти и заменить в тексте html все случаи

src="/jsfile.js

с

src="http://mysite.com/jsfile.js

, затем

src="../jsfile.js

с

src="http://mysite.com/jsfile.js

и затем

src="js/jsfile.js

с

src="http://mysite.com/js/jsfile.js

а может и больше дел?ну, конечно, также href сценарии

ОБНОВЛЕНИЕ

возможно, мой вопрос был написан плохо, но цель состоит в том, чтобы заменить любую относительную ссылку или относительную ссылку на абсолютную ссылку ... я неуверен, что ответы ниже работают

Ответы [ 4 ]

1 голос
/ 08 февраля 2012

Как насчет одного регулярного выражения, использующего preg_replace? Это также будет работать для атрибутов href и src. Не забудьте проверить демо, чтобы увидеть его в действии!

Это преобразует все вышеперечисленные тесты правильно:

$result = preg_replace( '/(src|href)="(?:\.\.\/|\/)?([^"]+)"/i', '$1="' . $url . '/$2"', $test);

Демо

0 голосов
/ 08 февраля 2012
<?php
$html = file_get_contents('index.html');
$html = preg_replace_callback('#"(\S+).js"#', "replace_url", $html);
function replace_url($url) {
return '"http://'.$_SERVER['HTTP_HOST'].chr(47).trim($url[1], '/,.').'.js"';
}
echo $html;

Использовать preg_replace_callback

0 голосов
/ 08 февраля 2012

Если оно становится больше 3, используйте

$pathes=array(
  'src="/jsfile.js' => 'src="http://mysite.com/jsfile.js',
  'src="../jsfile.js' => 'src="http://mysite.com/jsfile.js',
  'src="js/jsfile.js' => 'src="http://mysite.com/js/jsfile.js'
);


$newhtml=str_replace(array_keys($pathes),$pathes,$oldhtml);
0 голосов
/ 08 февраля 2012

Это не очень хорошее сравнение. Эти две функции служат отдельным целям. Я бы лично использовал три, в таком порядке:

  1. preg_match: найти URL-адреса, которые необходимо изменить.
  2. substr: изменить URL-адреса.
  3. str_replace: замените старые URL-адреса измененными URL-адресами.
...