我正在使用file_get_contents
来获取某些文件内容。到目前为止,这是有效的。但是我想在显示文件之前搜索文件并用<a href="
替换所有<a href="site.php?url=
。我怎样才能做到这一点?我知道我应该使用某种str_replace
甚至preg_replace
。但我不知道如何实际搜索并为我file_get_contents
获得的文件执行此操作。
答案 0 :(得分:4)
$text = file_get_contents('some_file');
$text = str_replace('<a href="', '<a href="site.php?url=', $text);
答案 1 :(得分:2)
file_get_contents
返回包含文件内容的字符串。
所以,你可以使用你想要的任何字符串操作函数来处理这个字符串,就像你谈到的那样。
使用str_replace这样的事情可能会:
$content = file_get_contents('http://www.google.com');
$new_content = str_replace('<a href="', '<a href="site.php?url=', $content);
echo $new_content;
但请注意,当该属性是href
代码的第一个属性时,它只会替换<a
属性中的网址。
使用正则表达式可能可以帮助您更多;但它可能也不会完美,我害怕......
如果您正在处理HTML文档并想要一个“完整”解决方案,那么使用DOMDocument::loadHTML
并使用DOM操作方法可能是另一个(更复杂,但可能更强大)解决方案。
根据您的意愿,这两个问题的答案也可能对您有所帮助:
编辑:
如果要替换两个字符串,可以将数组传递给str_replace
的两个第一个参数。例如:
$new_content = str_replace(
array('<a href="', 'Pages'),
array('<a href="site.php?url=', 'TEST'),
$content);
有了这个:
<a href="
'将替换为'<a href="site.php?url=
'Pages
”将替换为“TEST
”并引用手册:
如果搜索和替换是数组, 然后str_replace()从中获取一个值 每个数组并使用它们进行搜索 并取代主题。如果更换 比搜索更少的值,然后是 空字符串用于其余部分 替换值。如果搜索是 然后,array和replace是一个字符串 这个替换字符串用于 每一个搜索价值。
如果您要替换“<a href="
”的所有实例,那么它是str_replace
默认执行的操作: - )
答案 2 :(得分:1)
$new_content = preg_replace('!(<a\s*[^>]*)href="([^"]+)"!','\1 href="site.php?url=\2"', $content);
我认为这应该可以解决问题:
答案 3 :(得分:0)
如果您想在您的网站上使用远程文档但保持该文档的链接不变,请更好地使用BASE
element来声明基本URI:
<base href="http://example.com/path/to/remote/document">
答案 4 :(得分:0)
就像bisko发送的代码一样,无论是封闭','还是href
$text = '<a href="http://www.europanet.com.br">Europanet</a> <a target="_blank" href=\'http://www.webjump.com.br\'>Webjump</a>
<a id="link" href=http://www.euforia.com.br target="_top">Euforia</a>';
$text = preg_replace('|(<a\s*[^>]*href=[\'"]?)|','\1site.php?url=', $text);
答案 5 :(得分:0)
出于稳定性/可靠性的考虑,建议使用DOM解析器而不是正则表达式或基本的字符串替换函数,因为它们对DOM不了解。
这不是性能最高的解决方案,但是它干净,可读,易于维护并且很少出现故障。最终用户不太可能注意到性能下降。
下面的代码段是对this answer的改编。
没有调用preg_
或str_replace()
函数。我使用Xpath过滤掉任何不需要的href匹配项。调用http_build_query()
是生成编码的url查询字符串的一种干净方法。
代码:(Demo)
$html = <<<HTML
<div>
<img src="icons/example.svg">
<a href="http://www.example.com">a link</a>
<link href="css/example.css">
<iframe src="http://www.example.com/default.htm"></iframe>
</div>
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//a/@href') as $attr) {
$attr->value = "site.php?" . http_build_query(['url' => $attr->value]);
}
echo $dom->saveHTML();
输出:
<div>
<img src="icons/example.svg">
<a href="site.php?url=http%3A%2F%2Fwww.example.com">a link</a>
<link href="css/example.css">
<iframe src="http://www.example.com/default.htm"></iframe>
</div>