preg_replace 函数将字符串附加到页面的所有超链接

发布于 2024-09-01 15:35:56 字数 696 浏览 4 评论 0原文

我想将我自己的值附加到页面中的所有超链接...例如,如果有链接:

<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”这样的变量

应该是:

<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 函数

i want to append my own value to all hyperlinks in a page... e.g if there are links:

<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/>

I want to add next var like "type=int" to all hyperlinks

output should be:

<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/>

I hope it can be done quite easily with preg_replace function

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

手心的温暖 2024-09-08 15:35:56

如果只需将变量附加到 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);

If it's a matter of just appending the variable to the href attribute, then this would work:

#                                              v-- & instead of & for W3C validation
preg_replace('/(<a\\s+[^>]+href="[^"]*)(")/', '${1}&type=int$2', $page_src);

But if you are wanting code-hardiness, in that href="index.php" gets changed into href="index.php?type=int" and not href="index.php&type=int", then you'll need some extra checking:

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);
难以启齿的温柔 2024-09-08 15:35:56

您可以使用 输出缓冲区output_add_rewrite_var 来做到这一点。您可能需要调整 url_rewriter.tags 以仅重写 a 元素的 href 属性。

You can use the output buffer and output_add_rewrite_var to do that. You might need to adjust url_rewriter.tags to only rewrite the href attributes of a elements.

羁〃客ぐ 2024-09-08 15:35:56

您可以使用

preg_replace('/(\<a [^>]*href=")([^"]*)"/i', '&\1\2type=int"', page);

,但请注意,这可能会破坏任意 html 文件。我建议仅将 Regex 用于 HTML 操作作为一次性操作。如果您需要更频繁地执行此操作,或者需要对大量文件执行此操作,请考虑使用 HTML 解析器。

You can use

preg_replace('/(\<a [^>]*href=")([^"]*)"/i', '&\1\2type=int"', page);

Be warned, though, that this is likely to break on arbitrary html files. I'd recommend using Regex for HTML manipulation only as a one shot operation. If you need to do this more often, or on a lot of files, consider using a HTML parser.

女皇必胜 2024-09-08 15:35:56

我不是正则表达式专家,但这听起来你应该考虑使用会话或cookie......

i'm not a regexp-expert, but this sounds like you should think of using sessions or cookies...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文