我的 html 内容如下所示:
<div class="preload"><img src="PRODUCTPAGE_files/like_icon_u10_normal.png" width="1" height="1"/><img src="PRODUCTPAGE_files/read_icon_u12_normal.png" width="1" height="1"/><img src="PRODUCTPAGE_files/line_u14_line.png" width="1" height="1"/>
这是一条完整的长线,没有任何换行符分隔每个 img 元素,也没有任何缩进。
我使用的php代码如下:
/**
*
* Take in html content as string and find all the <script src="yada.js" ... >
* and add $prepend to the src values except when there is http: or https:
*
* @param $html String The html content
* @param $prepend String The prepend we expect in front of all the href in css tags
* @return String The new $html content after find and replace.
*
*/
protected static function _prependAttrForTags($html, $prepend, $tag) {
if ($tag == 'css') {
$element = 'link';
$attr = 'href';
}
else if ($tag == 'js') {
$element = 'script';
$attr = 'src';
}
else if ($tag == 'img') {
$element = 'img';
$attr = 'src';
}
else {
// wrong tag so return unchanged
return $html;
}
// this checks for all the "yada.*"
$html = preg_replace('/(<'.$element.'\b.+'.$attr.'=")(?!http)([^"]*)(".*>)/', '$1'.$prepend.'$2$3$4', $html);
// this checks for all the 'yada.*'
$html = preg_replace('/(<'.$element.'\b.+'.$attr.'='."'".')(?!http)([^"]*)('."'".'.*>)/', '$1'.$prepend.'$2$3$4', $html);
return $html;
}
}
我希望我的函数能够正常工作,不管 img 元素的形成有多糟糕。
无论 src 属性的位置如何,它都必须工作。
它唯一应该做的就是在 src 值前面加上一些东西。
另请注意,如果 src 值以 http 开头,则不会发生此 preg_replace。
现在,我的代码只有在我的内容是:
<div class="preload">
<img src="PRODUCTPAGE_files/like_icon_u10_normal.png" width="1" height="1"></img>
<img src="PRODUCTPAGE_files/read_icon_u12_normal.png" width="1" height="1"/><img src="PRODUCTPAGE_files/line_u14_line.png" width="1" height="1"/><img src="PRODUCTPAGE_files/line_u15_line.png" width="1" height="1"/>
正如您可能猜到的那样,它成功地做到了,但仅适用于第一个 img 元素,因为它进入下一行,并且在开始的 img 标记的末尾没有 /。
请告知如何改进我的功能。
更新:
我使用了 DOMDocument,它奏效了!在添加 src 值之后,我需要将其替换为 php 代码片段
所以原创:
<img src="PRODUCTPAGE_files/read_icon_u12_normal.png" width="1" height="1"/>
使用 DOMDocument 并添加我的前置字符串后:
<img src="prepended/PRODUCTPAGE_files/read_icon_u12_normal.png" width="1" height="1" />
现在我需要用以下内容替换整个内容:
<?php echo $this->Html->img('prepended/PRODUCTPAGE_files/read_icon_u12_normal.png', array('width'=>'1', height='1')); ?>
我还能使用 DOMDocument 吗?或者我需要使用 preg_replace?