Я хотел бы добавить корневой путь сайта для тех тегов привязки, которые не имеют корневого пути, используя php dom document. До сих пор они сделали функцию, чтобы сделать это с помощью функции str_replace, но для некоторых ссылок это добавление трех и для корневого пути времени. Тогда что я должен отредактировать в этой функции.
Проблема : = Проблема заключается в том, что он добавляет три и для корневого пути времени для каждого тега привязки, а не для некоторых. Переменная $ HTML имеет много привязанных тегов, около 200 ссылок. А также для изображений.
Я знаю, что это очень грязный вопрос, но что я пропустил, я не могу получить.
function addRootPathToAnchor($HTML) { $tmpHtml = ''; $xml = new DOMDocument(); $xml->validateOnParse = true; $xml->loadHTML($HTML); foreach ($xml->getElementsByTagName('a') as $a ) { $href = $a->getAttribute('href'); if(strpos($href,'www' > 0)) continue; else $HTML = str_replace($href,"http://www.mysite.com/".$href,$HTML); } return $HTML; }
Я вижу некоторые проблемы в вашем коде:
Как определить, является ли URL относительным.
Относительные URL-адреса не определяют протокол. Поэтому я должен проверить это, чтобы определить, является ли атрибут href полным (абсолютным) URI или нет ( Demo ):
$isRelative = (bool) !parse_url($url, PHP_URL_SCHEME);
Разрешение относительного URL-адреса на базовый URL-адрес
Однако это не поможет вам правильно разрешить относительный URL-адрес базового URL-адреса. То, что вы делаете, концептуально нарушено. В RFC указано, как разрешить относительный URI базовому URL ( RFC 1808 и RFC 3986 ). Вы можете использовать существующую библиотеку, чтобы просто сделать работу для вас, рабочий – Net_URL2 :
require_once('Net/URL2.php'); # or configure your autoloader $baseUrl = 'http://www.example.com/test/images.html'; $hrefRelativeOrAbsolute = '...'; $baseUrl = new Net_URL2($baseUrl); $urlAbsolute = (string) $baseUrl->resolve($hrefRelativeOrAbsolute);
Вместо if(strpos($href,'www' > 0))
вы должны использовать if(strpos($href,'www') !== false)
.
Функция > 0
находилась внутри функции-вызова ( strpos()
).