【问题标题】:Extracting link from a href and putting it within brackets从href中提取链接并将其放在括号中
【发布时间】:2016-09-04 10:14:59
【问题描述】:

我已经搜索过,但找不到我要找的东西。

通常情况下是这样的:

<p>
    Hi how are you? Have you checked <a href="http://www.google.com">Google</a> or <a href="http://www.youtube.com">YouTube</a>?
</p>

但我很想拥有,因为我愿意在打印或 PDF 页面上应用它:

<p>
     Hi how are you? Have you checked <a href="http://www.google.com">Google</a> (<a href="http://www.google.com">http://www.google.com</a>)
     or <a href="http://www.youtube.com">YouTube</a> (<a href="http://www.youtube.com">http://www.youtube.com</a>)?
</p>

现在,我知道应该有一些使用正则表达式的工作,但我不知道如何使用它。文本将取自其中包含文章的变量 $content,我想要的是 $content 中的所有链接保持原样加上 href 的内容作为括号内的附加超链接 "() " 因此,假设当有人阅读包含超链接的印刷文章时,他们将能够看到实际的 URL。

【问题讨论】:

    标签: php regex hyperlink


    【解决方案1】:

    使用伪元素在链接后添加href,例如:

    a[href]:after  
    {
        content: " (" attr(href) ") ";
    }
    

    【讨论】:

    • 非常感谢。有没有你知道的正则表达式方法来做到这一点?
    • 因为它不能与 mPDF 一起使用,因为 mPDF 不支持这些伪元素。
    • @Stuart 的解决方案非常理想(更快、更简洁),但就目前而言,由于您提到的 mPDF 的兼容性问题,您似乎需要一个正则表达式解决方案。您不妨试试下面的正则表达式解决方案,看看它是否符合您的要求。
    【解决方案2】:

    这是一个方便的小函数,可能就足够了。

        <?php
    
            /**@var string $strInput  THE STRING TO BE FILTERED */
            function doubleUpOnURL($strInput){
                $arrAnchorSplit     = preg_split("#<\/a>#", $strInput);
                $strOutput          = "";
                $anchorRegX         = '(<a\s*href=[\'\"])(.+)([\'\"]>)(.*)';
                foreach($arrAnchorSplit as $anchoredString){
                    $strOutput     .= preg_replace("#" . $anchorRegX . "#si" , "$1$2$3$4</a> ($1$2$3$2</a>)", $anchoredString);
                }
                return $strOutput;
            }
    
            $strInput = '<p>Hi how are you? Have you checked <a href="http://www.google.com">Google</a> or <a href="http://www.youtube.com">YouTube</a>?</p>';
    
            echo(doubleUpOnURL($strInput));
            //OUTPUTS:
            // Hi how are you? Have you checked Google (http://www.google.com) or YouTube (http://www.youtube.com)?
    

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2017-12-06
      相关资源
      最近更新 更多