如何使这个链接脚本与 Markdown 一起运行?

发布于 2024-10-28 19:27:37 字数 675 浏览 1 评论 0原文

我正在使用 PHP markdown,但我还需要一个脚本将纯文本链接转换为可点击的链接。两者都是独立工作的,但是当我尝试一起运行它们时,如果我先运行 markdown,makelink 仍然会处理 html 代码并将事情搞砸......反之亦然。知道如何阻止它这样做吗?我无法找出正则表达式来忽略 Markdown 样式链接

function makeLinks($text) {
    $text = preg_replace('%(((f|ht){1}tp://)[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i',
    '<a href="\\1">\\1</a>', $text);
    $text = preg_replace('%([[:space:]()[{}])(www.[-a-zA-Z0-9@:\%_\+.~#?&//=]+)%i',
    '\\1<a href="http://\\2">\\2</a>', $text);

        return $text;
}

示例文本:

###[Title Section](http://domain/folder/page.html)
- Blah blah some text and then a link: www.webpage.org. 

I'm using PHP markdown but I also need a script to convert plaintext links into clicakable ones. Both work independently, but when I try to run them together, if I run markdown first, the makelinks still processes on the html code and screws things up.. and.. vice versa. Any idea of how to stop it from doing that? I can't figure out regex to ignore the markdown style links

function makeLinks($text) {
    $text = preg_replace('%(((f|ht){1}tp://)[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i',
    '<a href="\\1">\\1</a>', $text);
    $text = preg_replace('%([[:space:]()[{}])(www.[-a-zA-Z0-9@:\%_\+.~#?&//=]+)%i',
    '\\1<a href="http://\\2">\\2</a>', $text);

        return $text;
}

sample text:

###[Title Section](http://domain/folder/page.html)
- Blah blah some text and then a link: www.webpage.org. 

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

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

发布评论

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

评论(1

东京女 2024-11-04 19:27:37

双链接问题可以通过猜测和解决方法得到最好的解决。 (我们有一些重复的问题,但我永远找不到一个好的问题..)

由于已经转换的 http://-url 只出现在 href=">,您可以将它们用于否定断言。

(?<!href="|>)

应该在第一个正则表达式的开头编写:

$text = preg_replace('%(?<!href="|>)(((f|ht){1}tp://)...

您的第二个正则表达式使用 :space: 作为锚点,因此应该已经具有容错能力。

The double-linkify problem can be solved best with guesswork and workarounds. (We have some duplicate questions, but I can never find a good one..)

Since already converted http://-urls only occur right after href=" or an >, you can use those for negative assertions.

(?<!href="|>)

Should be written at the start of your first regex:

$text = preg_replace('%(?<!href="|>)(((f|ht){1}tp://)...

Your second regex uses the :space: as anchor, so should be fault tolerant already.

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