【问题标题】:Add http(s) to `<a>` tags that are missing http(s) with PHP [closed]使用 PHP 将 http(s) 添加到缺少 http(s) 的`<a>` 标签 [关闭]
【发布时间】:2016-11-24 09:16:23
【问题描述】:

如何将http(s):// 添加到&lt;a href="..."&gt; PHP 中没有的链接?此输入来自大量 html 输入,我只想修复 &lt;a&gt; 标签中不正确的链接。比如我想要这个

<html><body><a href="google.com">link</a></body></html>

变成这个

<html><body><a href="https://google.com">link</a></body></html>

没有改变 html 的其余部分。

此外,我将如何解析 html 以查找纯文本链接并将其转换为 &lt;a href="..."&gt; 而无需更改 html 的任何其余部分?

谢谢。

【问题讨论】:

  • 您需要自己尝试,这不是免费的编码服务。一旦你尝试过,如果你卡住了,请回复你的尝试和任何问题
  • 我在这个网站上查找了许多帖子并修改了这些帖子的结果,但我完全迷失了,没有任何效果。我不太了解正则表达式,也找不到让它工作的方法。
  • 解析 HTML 然后拉取href 属性并检查它是否具有协议。可能是^https?://(没有/ 分隔符)。
  • 那我该怎么做呢?

标签: php html regex dom


【解决方案1】:

我发现了如何通过使用先前的答案和使用 DOMDocument 轻松做到这一点:

function addScheme($url, $scheme = 'http://'){
    return parse_url($url, PHP_URL_SCHEME) === null ? $scheme . $url : $url;
}
// parse the html
$dom = new DOMDocument;
$dom->loadHTML($text);
// make sure links are correct
$a_tags = $dom->getElementsByTagName('a');
foreach ($a_tags as $a) {
    // make sure that links start with http(s)
    $a->setAttribute('href', addScheme($a->getAttribute('href')));
}
// save parsed version
$text = $dom->saveHTML();

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 2018-03-14
    • 2018-12-13
    • 2016-01-14
    • 2011-12-16
    • 2011-09-08
    • 2022-11-21
    相关资源
    最近更新 更多