我想将自己的值附加到页面中的所有超链接...例如,如果有链接:
<a href="abc.htm?val=1">abc 1</a> <br/>
<a href="abc.htm?val=2">abc 1</a> <br/>
<a href="abc.htm?val=3">abc 1</a> <br/>
<a href="abc.htm?val=4">abc 1</a> <br/>
我想在所有超链接
中添加类似“type = int”的下一个var 输出应该是:<a href="abc.htm?val=1&type=int">abc 1</a> <br/>
<a href="abc.htm?val=2&type=int">abc 1</a> <br/>
<a href="abc.htm?val=3&type=int">abc 1</a> <br/>
<a href="abc.htm?val=4&type=int">abc 1</a> <br/>
我希望使用preg_replace函数
可以很容易地完成答案 0 :(得分:4)
如果只是将变量附加到href
属性,那么这将有效:
# v-- & instead of & for W3C validation
preg_replace('/(<a\\s+[^>]+href="[^"]*)(")/', '${1}&type=int$2', $page_src);
但是如果你想要代码耐用,那么href="index.php"
会变成href="index.php?type=int"
而不是href="index.php&type=int"
,那么你需要额外检查一下:
function process_link_matches ($matches) {
# get rid of full matching string; all parts are already covered
array_shift($matches);
if (preg_match('/\\?[^"]/', $matches[2])) {
# link already contains $_GET parameters
$matches[1] .= '&type=int';
} else {
# starting a new list of parameters
$matches[1] .= '?type=int';
}
return implode($matches);
}
$page_src = preg_replace_callback('/(<a\\s+[^>]+href=")([^"]*)("[^>]*>)/',
'process_link_matches', $page_src);
答案 1 :(得分:2)
您可以使用output buffer和output_add_rewrite_var
来执行此操作。您可能需要调整url_rewriter.tags以仅重写href
元素的a
属性。
答案 2 :(得分:1)
您可以使用
preg_replace('/(\<a [^>]*href=")([^"]*)"/i', '&\1\2type=int"', page);
但请注意,这可能会破坏任意html文件。我建议仅将Regex用于HTML操作作为一次性操作。如果您需要更频繁地或大量文件,请考虑使用HTML解析器。
答案 3 :(得分:0)
我不是regexp专家,但这听起来像你应该考虑使用会话或cookie ......