我需要一個正則表達式查找並替換,我有點卡住了。PHP查找並替換函數
基本上,我有在每個<td>
與幾個<td>
的 表我有一個<img>
我需要的寬度和高度從<img>
複製並放置在<td>
我有一直在做這個手動,但<td>
的數量正在增加,並且需要很長時間。
我只是需要幫助做實際的查找和替換
有什麼想法嗎?
- 編輯 -
謝謝你的建議,我想我也會走DOM路線,因爲我更瞭解它。 我已經完成了註冊前的任務,這是一個更簡單的想法,所以剛剛從那裏開始。你爲我節省了一些時間
我需要一個正則表達式查找並替換,我有點卡住了。PHP查找並替換函數
基本上,我有在每個<td>
與幾個<td>
的 表我有一個<img>
我需要的寬度和高度從<img>
複製並放置在<td>
我有一直在做這個手動,但<td>
的數量正在增加,並且需要很長時間。
我只是需要幫助做實際的查找和替換
有什麼想法嗎?
- 編輯 -
謝謝你的建議,我想我也會走DOM路線,因爲我更瞭解它。 我已經完成了註冊前的任務,這是一個更簡單的想法,所以剛剛從那裏開始。你爲我節省了一些時間
你應該考慮使用PHP提供的DOMDocument
類。
例子:
<?php
$doc = new DOMDocument;
$doc->loadHTMLFile('/path/to/file.html');
// Find the TD elements.
$tds = $doc->getElementsByTagName('td');
// If TD elements were found, loop through each one of them.
if (! empty($tds))
foreach ($tds as $td)
{
// Find the IMG elements located inside that TD
$imgs = $td->getElementsByTagName('img');
// Find the style attribute of the TD just in case one already exists.
$style = $td->getAttribute('style');
// I'm not sure what to do if multiple images are found so instead of looping to many, make sure only 1 is found.
if (! empty($imgs) && count($imgs) == 1)
{
$height = $imgs->item(0)->getAttribute('height');
$width = $imgs->item(0)->getAttribute('width');
if (! empty($height))
$style .= 'height:' . $height . 'px;';
if (! empty($width))
$style .= 'width:' . $width . 'px;';
// Update the style attribute of the TD element.
$td->setAttribute('style', $style);
}
}
// Save the HTML document.
$doc->saveHTMLFile('/path/to/newfile.html');
更新:
<html>
<body>
<table>
<tr>
<td><img src="test.png" height="100" width="100" /></td>
<td>
<p><img src="test2.png" height="100" /></p>
</td>
</tr>
</table>
</body>
</html>
要:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<table>
<tr>
<td style="height:100px;width:100px;"><img src="test.png" height="100" width="100"></td>
<td style="height:100px;">
<p><img src="test2.png" height="100"></p>
</td>
</tr>
</table>
</body>
</html>
完美。感謝您的幫助,爲我節省了很多頭痛 – atmd
你可以做到這一點,沒有正則表達式。試試這樣的:
var images = document.getElementsByTagName('img');
for(var i=0, j=images.length; i<j; i++){
images[i].parentNode.setAttribute('height', images[i].height);
images[i].parentNode.setAttribute('width', images[i].width);
}
腳本假定你沒有圖像,除了你上面提到的。
嘗試這樣:
preg_replace('/<td>(.*?)<img(.*?)width=\"(\d+)(.*?)height=\"(\d+)(.*?)<\/td>/','<td width="${3}" height="${5}">${1}<img${2}width="${3}${4}height="${5}${6}</td>', $html);
開關的寬度和高度,如果必要=)
做u做字符串連接的任何地方? – Sudantha
如果您使用DOMDocument類而不是嘗試字符串操作,這可能會更容易,更健壯。 – Spudley
不要使用正則表達式的HTML解析... PHP有一對不錯的XML解析器,我個人的粉絲http://us2.php.net/manual/en/book.simplexml.php –