繁体   English   中英

php:用链接替换容器内的文本。 preg_replace?

[英]php: replace text within a container with link. preg_replace?

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

我有一些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实际上格式正确,必须在anchours和图像中分别用[[和]]替换<&>,以便发布。)

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

'/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); ?>

那用一个空的anchour替换了文本就好了,我陷入了如何使用反向引用创建链接URL的困境。

一些注意事项

链接只能包裹文本(以后可能只需要包裹文本的一部分,但是当我到达它时,我会越过那座桥)

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

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

为您能给我的任何帮助加油。

安迪

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

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

我做完了!

感谢Jordi发现原始缺陷。

我在函数内部的preg_replace thats中找到了这个调用函数

这导致我转向使用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>';

    }
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM