正则表达式在图像标记中查找图像路径文件

时间:2010-05-22 21:19:28

标签: php image

我正在寻找在图像标记(src)中找到所有图片路径的正则​​表达式,并通过cid:filename

转换所有图片路径
<img src="../images/text.jpg" alt="test" />

<img src="cid:test" alt="test" />

感谢您的帮助

克里斯

2 个答案:

答案 0 :(得分:2)

正如Web Logic建议的那样,我宁愿尝试使用PHP DOM扩展,特别是如果您正在使用整个HTML文档。您可以将一些HTML片段传递给PHP DOM实例或完整HTML页面的内容。

如果您只有一个像<img src="../images/text.jpg" alt="test" />这样的图像元素的字符串,并希望将其src属性设置为没有文件扩展名的image-filename,那么如何做建议的示例以cid:

为前缀
<?php
$doc = new DOMDocument();
// Load one or more img elements or a whole html document from string
$doc->loadHTML('<img src="../images/text.jpg" alt="test" />'); 

// Find all images in the loaded document
$imageElements = $doc->getElementsByTagName('img'); 
// Temp array for storing the html of the images after its src attribute changed
$imageElementsWithReplacedSrc = array();

// Iterate over the found elements
foreach($imageElements as $imageElement) {
  // Temp var, storing the value of the src attribute
  $imageSrc = $imageElement->getAttribute('src');
  // Temp var, storing the filename with extension
  $filename = basename($imageSrc);
  // Temp var, storing the filename WITHOUT extension
  $filenameWithoutExtension = substr($filename, 0, strrpos($filename, '.')); 
  // Set the new value of the src attribute
  $imageElement->setAttribute('src', 'cid:' . $filenameWithoutExtension);

  // Save the html of the image element in an array
  $imageElementsWithReplacedSrc[] = $doc->saveXML($imageElement);
}

// Dump the contents of the array
print_r($imageElementsWithReplacedSrc);

打印此结果(在Windows Vista上使用PHP 5.2.x):

Array
(
    [0] => <img src="cid:text" alt="test"/>
)

如果要将src属性的值设置为以cid:为前缀的alt属性的值,请查看以下内容:

<?php
$doc = new DOMDocument();
// Load one or more img elements or a whole html document from string
$doc->loadHTML('<img src="../images/text.jpg" alt="test" />');

// Find all images in the loaded document
$imageElements = $doc->getElementsByTagName('img'); 
// Temp array for storing the html of the images after its src attribute changed
$imageElementsWithReplacedSrc = array();

// Iterate over the found elements
foreach($imageElements as $imageElement) {
  // Set the new value of the src attribute
  $imageElement->setAttribute('src', 'cid:' . $imageElement->getAttribute('alt'));

  // Save the html of the image element in an array
  $imageElementsWithReplacedSrc[] = $doc->saveXML($imageElement);
}

// Dump the contents of the array
print_r($imageElementsWithReplacedSrc);

打印:

Array
(
    [0] => <img src="cid:test" alt="test"/>
)

我希望能让你开始。这些只是如何处理DOM扩展的示例,您需要解析的内容(HTML片段或完整的HTML文档)以及您需要输出/存储的内容有点模糊。

答案 1 :(得分:0)

您可以使用 PHP DOM 来解析您的HTML并相应地进行搜索替换。

否则,你也可以使用 JQuery 来轻松完成这些工作:

$(function(){
  $('img').each(function(){
   $(this).attr('src').replace('cid:' + $(this).attr('src'));
  });
});