正则表达式替换依赖于类

时间:2012-08-19 00:39:24

标签: php regex wordpress

我有以下代码替换页面上的所有标记,并将nCode图像缩放器添加到其中。代码如下:

function ncode_the_content($content) {
return preg_replace("/<img([^`|>]*)>/im", "<img onload=\"NcodeImageResizer.createOn(this);\"$1>", $content); }

}

我需要做的是,如果图像具有“noresize”类,则不会执行preg_match。

我只是设法得到它,以便如果页面上的任何地方都有“noresize”类,它会停止调整所有图像的大小,而不仅仅是具有正确类的图像。

有什么建议吗?

更新

我是否在这个合适的球场远程?

function ncode_the_content($content) {

//Load the HTML page
$html = file_get_contents($content);
//Parse it. Here we use loadHTML as a static method
//to parse the HTML and create the DOM object in one go.
@$dom = DOMDocument::loadHTML($html);

//Init the XPath object
$xpath = new DOMXpath($dom);

//Query the DOM
$linksnoresize = $xpath->query( 'img[@class = "noresize"]' );
$links = $xpath->query( 'img[]' );

//Display the results as in the previous example
foreach($links as $link){
echo $link->getAttribute('onload'), 'NcodeImageResizer.createOn(this);';
}

foreach($linksnoresize as $link){
echo $link->getAttribute('onload'), '';
}
  }

2 个答案:

答案 0 :(得分:0)

这是一些未经测试的代码:

$dom = DOMDocument::loadHTML($content);
$images = $dom->getElementsByTagName("img");
foreach ($images as $image) {
    if (!strstr($image->getAttribute("class"), "noresize")) {
        $image->setAttribute("onload", "NcodeImageResizer.createOn(this);");
    }
}

但是,如果是我,我会避开任何这样的内联事件处理程序,而只是使用Javascript找到合适的元素。

答案 1 :(得分:0)

我最后只使用纯CSS并添加了我不想调整大小的图像。将该div的宽度和高度强制回自动,然后删除它们上方显示的警告消息。似乎工作正常。谢谢你的帮助:)