简而言之,我利用pre_replace
查找样式表,并基本上为我网站上的观众代理这种体验,我使用外部域prepend
将其用于当前{{1 }}。样式表就是这样开始的。
href
我会将<link rel="stylesheet" type="text/css" href="/assets/css/base.css">
和href
域名视为
prepend
我的问题是,当我遇到不包含HTTP / HTTPS
的网站时<link rel="stylesheet" type="text/css" href="http://www.website.com/assets/css/base.css">
然后我当前的preg替换将无法运行并将样式表返回到以下
<link rel="stylesheet" type="text/css" href="//cdn.website.com/assets/css/base.css">
是否可以使用<link rel="stylesheet" type="text/css" href="http://www.website.com//cdn.website.com/assets/css/base.css">
创建某种If then
来操纵&#34; //&#34; hrefs只替换没有绝对基域的那些?
正在使用的当前preg_replace
:
preg_replace
答案 0 :(得分:1)
[^(href)]
不是否定。它仍然是一个角色类。
您正在寻找(?!...)
negative lookahead:
~ (href|src) =\" (?!href:) \/? ~x
虽然我对SO模因和为每个琐事启动DOM遍历的过度概括提出质疑,但应该注意的是,正则表达式通常仅适用于规范化和众所周知的HTML输入;如果你的任务是代理任意网站,那就不行了。
答案 1 :(得分:0)
function alterLinks($html) {
$ret = '';
$dom = new DomDocument();
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
foreach ($links as $alink) {
$href = $alink->getAttribute('href');
$aMungedLink = $this->mungeHref($href);
$alink->setAttribute("href",$aMungedLink);
}
$ret = $dom->saveHTML();
return $ret;
}