如何防止GitHub维基自动生成链接?

101
在 GitHub 的维基页面上,如果我输入:
www.foobar.com

GitHub会自动将http://www.foobar.com视为URL并将文本转换为超链接。但是,有时我不想创建超链接。有没有方法可以停止这种行为?也许可以使用某种Markdown语法?

将URL放入代码环境中(即在反引号中间) - MrTux
VSCode 1.63(2021年11月,7年后)不应为没有http(s)://的URL生成链接。请参见我下面的编辑答案 - VonC
7个回答

110

2021年11月更新,VSCode 1.63:

问题136198“Markdown预览错误创建链接”应该得到缓解。

尽管"markdown.preview.linkify": false会完全禁用自动链接功能,但将md.linkify.fuzzyLink设置为false仅会禁用没有http(s)标头的链接。
我认为这是更好的替代方案,并且markdown-it已经支持。


原始回答(2014年): 这不仅限于维基页面,而且是GFM(GitHub Flavored Markdown)url自动链接功能的一部分。

将它们放在``中可以工作,但会将URL显示为代码:foo http://example.com bar。

foo `http://example.com` bar

另一个技巧(在此要点中提到)是

ht<span>tp://</span>example.com 

这将把 http://example.com 显示为普通文本。

在您的情况下(不带 http://)

w<span>ww.</span>foobar.com

这也会将 www.foobar.com 显示为普通文本。

geekley 在评论中添加了 以下内容:

对于电子邮件,你可以使用 foo<span>@</span>example.com


Venryx评论中建议一种更短、更简洁的解决方案:

只需添加一个void element标签(我更喜欢<area>),放置在打断URL检测的位置,例如在第一个点之前。

示例:www<area>.foobar.com


3
不是最理想的,但这是我迄今为止找到的唯一可行的解决方案。谢谢。 - david
21
同一份Gist底部也提到了使用标点符号字符&#46; - kitsu.eb
2
不需要一个长的标签名 https<k>://exa</k>mple.com/ 就可以了 @kitsu.eb:那已经不起作用了,甚至 https&#58;//example&#46;com/ 也不行了... - davidkonrad
1
@Venryx 有趣的选项,谢谢。我已将您的评论包含在答案中以提高其可见性。 - VonC
2
@VonC 同时,我意识到使用空的<area>标签(或者这里提到的标签)比使用<span/>标签更好,原因有两个:1)它少一个字符。2)它更符合规范。(使用“自闭合”的span标签在技术上不是正确的HTML,因此会在某些网站上引起容器/嵌套问题)如果您不介意,我将把更改添加到您的答案中。(如果我做错了,请随意修改) - Venryx
显示剩余5条评论

42

此外,如果您遇到的问题不是关于URL自动链接的,我发现可以使用转义符号“.”来解决问题。

例如:

foobar.web -> foobar&#46;web

2
这是最佳解决方案。适用于文件名和URL。在VSCode中也可以使用。但似乎在SO评论中无法使用。example.com example.com - Bruno Bronosky
1
除非有人在2020年破坏了VS Code,否则这个功能在VS Code中已经不再可用。 - Dut A.
也适用于Discourse - Uwe Keim

15
您也可以对冒号(或其他任何标点符号)应用反斜杠转义,方法如下: backslash escape
http\://www.foobar.com

4
在内容呈现后,许多自动链接都会应用。根据我的经验,\:或任何其他转义都不会影响:,但链接仍将应用于类似URL的字符串。 - cautionbug

15

您可以使用零宽空格来防止大多数自动链接器将字符解释为URL

以下是一个示例,其中在https:之间插入了一个零宽空格:

https​://example.com/

要插入一个链接,你可以从上面的url复制,或者这个页面

另请参见twitter上的这个帖子

注意: 这可能会让任何试图手动复制和粘贴链接到URL中的人感到非常困惑,因为它不会解析,并且不清楚原因。这对于你实际上不希望被遍历的笑话URL最有效,例如www.great-answer-on-stack-overflow-kyle.com


2
我喜欢这个,因为它不会影响原始文件的可读性。 - Neil Thompson
5
请注意,HTML 中的​是一个空格符号。 - Paul Cuddihy
1
这是我新的最爱方法!感谢您的添加。 - Bruno Bronosky
2
禁用虚假票号的JIRA自动识别功能非常成功!谢谢! - JWT

7

建议使用零宽度不换行空格
在HTML中可以使用Unicode字符引用:&#xfeff;&#65279;

优点如下:

  • 防止自动链接(显然)
  • 不可见
  • 没有意外的换行
  • 源代码可读性好

示例

对于URL,请在http:之间插入
https​&#65279;://example.com/ → https​://example.com/

对于电子邮件,请在@后插入:
user@&#65279;example.com → user@example.com


这种方法对我很有效,使用VS进行编辑并在TFS/Git中查看。在VS Code中查看时转义是可以的,但在TFS/Git中不行。 - ThatITBloke

3
我建议这只是一个更完整和目前正确的答案。
有人提出,VSCode与Github的行为不同。似乎Github的自动URL处理作用于“www.”前缀(可能还有其他触发器),而VSCode会自动转换以IANA注册国家代码TLD结尾的任何点/句号分隔文本后缀。VSCode不像Github那样自动完成以“www.”开头的任何文本。比较下面的三张图片,注意标签的位置以及每个环境如何呈现文本。
请注意,抑制所有自动URL呈现的唯一机制是(最丑陋的)在每个句号之前放置一个。它可能无关紧要是什么标签。 'span'在所有情况下都可以使用。我使用'nowiki'因为它在这里在MediaWiki和其他一些地方是一致的。
然而,了解规则后,看来抑制自动URL呈现的“答案”取决于文本。
  • 如果以"www."开头,选择丑陋的解决方案。请参考Github渲染的最后两行,并注意倒数第二个句点前的标签只会抑制文本的最后一部分的渲染。
  • 但是,如果文本不以“www.”开头,则只需要在最后一个句点之前添加一个标签即可适用于VSC和GH。
  • 这两种环境都受到评估文本的规则的影响。在某些时候,任何常用的TLDs如.gov、.net或最终的任何有效ggTLDs如.online、.xyz或.aaa都可能自动转换。为了使您的文本具有未来兼容性,请考虑对所有此类文本使用丑陋的方法,其中文本不是将使用反引号呈现的代码。
  • 实际的标签似乎并不重要,无论是<nowiki/><span/>,还是<k>。个人建议使用nowiki,因为它已经是一个专门用于此目的的公认标签。
  • 关于&# HTML编码,我尝试了这里的建议,但文本没有被处理。我在这里没有包含示例,但请随意将任何内文标签替换为字符编码,以查看它如何工作。

VSCode编辑器:
原始的VSCode markdown

VSCode预览:
相同代码在VSCode markdown预览中呈现

Github Readme.md:
相同代码推送到repo并由Github渲染


2
在我的情况下,我使用了标题中的# some&#46;thing,这样我就得到了一个没有外部链接的标题。
另外,我使用了[some.thing](#something)作为链接。其中的"#something"来自于网页预览的链接。针对IT技术相关内容,建议您使用更加通俗易懂的语言进行表述,以便读者更好地理解。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接