【问题标题】:php: replace text within a container with link. preg_replace?php:用链接替换容器中的文本。 preg_replace?
【发布时间】:2011-05-15 16:32:59
【问题描述】:

我一直在寻找看似简单问题的答案,但无济于事。

我有一些 HTML 输出,例如:

<div id="attachment_1098" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" ]][[img class="size-thumbnail wp-image-1098" title="John Doe" src="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" alt="John Doe" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">John Doe</p></div>
<div id="attachment_1080" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-2.jpg" ]][[img class="size-thumbnail wp-image-1080" title="Fred Bloggs" src="mydomain.com/wp-content/uploads/2010/11/photo-1.jpg" alt="Fred Bloggs" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Fred Bloggs</p></div>
<div id="attachment_1099" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-3.jpg" ]][[img class="size-thumbnail wp-image-1099" title="Jane Doe" src="mydomain.com/wp-content/uploads/2010/11/photo-3.jpg" alt="Jane Doe" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Jane Doe</p></div>
<div id="attachment_1096" class="wp-caption alignleft" style="width: 160px">[[ a href="mydomain.com/wp-content/uploads/2010/11/photo-4.jpg" ]][[img class="size-thumbnail wp-image-1096" title="Joe Public" src="mydomain.com/wp-content/uploads/2010/11/photo-4.jpg" alt="Joe Public" width="150" height="200" /]][[ /a ]]<p class="wp-caption-text">Joe Public</p></div>

(上面的 html 实际上格式正确,必须将锚点和图像中的 分别替换为 [[ 和 ]] 才能发布。)

我想用“wp-caption-text”类围绕每个(p)的文本内容包装一个链接,其网址应具有以下格式:

'/my-page-root/'.strtolower(str_replace(' ','-',$linkText)).'';

(所以 John Doe 会链接到:/my-page-root/john-doe 等)

现在,我已经了解了 preg_replace,但我不知道如何从反向引用创建链接 URL。这让我认为必须有一种更简单的方法来做到这一点(可能还有更快的方法?)

无论如何,这是我得到的代码:

<?php $contentLinked = preg_replace("/(<p class=\"wp-caption-text\">.*<\/p>)/Us", "<p class=\"wp-caption-text\"><a href=\"\">$1</a></p>",$content); ?>

用空锚替换文本就好了,我不知道如何使用反向引用来创建链接 url。

一些注意事项

链接必须只包含文本(稍后可能只需要包含部分文本,但当我遇到它时,我会越过那座桥)

如果没有解决方法来防止剥离链接,Wordpress 将不允许通过所见即所得的方式进行此操作,有一天其他人可能会进入并破坏格式(因此是硬编码),因此没有有用的 wp 解决方法。

图片上的链接必须保留为完整尺寸的图片(jquery 库正在进行),因此不能将整个图片和/或 div 包含在链接中

为你能给我的任何帮助干杯。

安迪

【问题讨论】:

    标签: php preg-replace replace str-replace


    【解决方案1】:

    我认为您需要将要匹配的部分(文本)放在括号中,以便将其保存在反向引用中。像这样:

    <?php $contentLinked = preg_replace("/(<p class=\"wp-caption-text\">(.*)<\/p>)/Us", "<p class=\"wp-caption-text\"><a href=\"\">$1</a></p>",$content); ?>
    

    【讨论】:

    • 啊,是的,当然,很好地抓住了 Jordi。知道如何使用现在正确的反向引用来形成网址吗?干杯
    【解决方案2】:

    我做到了!

    感谢 Jordi 发现原始缺陷。

    我找到了这个calling function inside preg_replace thats inside a function

    这导致我改用 preg_replace_callback() (以前从未使用过,从未有过原因)

    如果其他人有类似的问题,我的结果代码如下:

    <?php $contentLinked = preg_replace_callback("/<p class=\"wp-caption-text\">(.*)<\/p>/Us", 'myCallback',$content);?>
    

    和功能:

    <?php 
    function myCallback($match){
    
            return '<a href="'.strtolower(str_replace(' ','-',$match[1])).'">'.$match[1].'</a>';
    
        }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多