我在HTML文件中有一堆<P>
标签,我想要附加一个唯一值,例如,我的HTML文件有以下内容(我已将此HTML文件转储到PHP变量中)使用file_get_contents
):
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
我想改变它,所以它改为:
<P id='unique1'> ... data ... </P>
<P id='unique2'> ... data ... </P>
<P id='unique3'> ... data ... </P>
<P id='unique4'> ... data ... </P>
<P id='unique5'> ... data ... </P>
由于这是一个常规HTML文件,因此还有其他标记可能驻留在文件中(例如<HTML>
,<HEAD>
,<STYLE>
,<BODY>
,等,但我想在所有<P>
标签
答案 0 :(得分:2)
你可以这样做......
$Count = count($MyData);
for ($i = 0; $i < $Count; ++$i) {
echo '<p id="id_' . $MyData[$i]->Id . '">... data ... </p>';
}
甚至这个......
$Count = count($MyData);
for ($i = 0; $i < $Count; ++$i) {
echo '<p id="id_' . $i . '">... data ... </p>';
}
请记住,HTML id属性必须以字母开头,而不是数字!
答案 1 :(得分:2)
您需要编写一些HTML解析器。您可以将此作为起点:
<?php
$html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
<P> ... data ... </P>
</body>
</html>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$paragraphs = $dom->getElementsByTagName('p');
$count = 0;
foreach($paragraphs as $p){
$count++;
$p->setAttribute('id', 'unique' . $count);
}
echo $dom->saveHTML();
在任何情况下,解析HTML都不是一项简单的任务,在JavaScript中处理随机ID列表也不是一件容易的事。确保你有理由做到这一切。
答案 2 :(得分:0)
您可以使用像Smarty这样的模板引擎,您可以使用这样的标记循环遍历数据集合:
{foreach from=$myItemsArray item=currentItem}
<p id='unique{$currentItem.id}'>{$currentItem.data}</p>
{/foreach}
只有当您的页面具有特定大小并且HTML文件中的数据可以从数据库生成时,这才是合理的。
如果您确实需要处理已存在的HTML文件,可以使用 REGEX 替换每个&lt; p&gt;标记为&lt; p id ='...'&gt;。在PHP中,函数是preg_replace或preg_replace_callback。我想如果你使用preg_replace,你需要在每次出现&lt; p&gt;时调用它。限制为1,因此您可以在每次通话后增加计数器,然后使用此计数器替换&lt; p&gt;与&lt; p id ='unique $ counter'&gt;。这是非常低效的,这就是为什么我建议使用preg_replace_callback,其中每次找到匹配时都会执行回调函数。我希望它能在这个回调函数中增加一个计数器(我没试过)。