[英]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.