【问题标题】:Replace Content for PHP Variable (HTML tags Stored)替换 PHP 变量的内容(存储的 HTML 标记)
【发布时间】:2013-09-01 12:20:16
【问题描述】:

我想替换 PHP 变量 ($html_content) 中的 <a> 标记内容...

变量$html_content 的值如下所示:

$html_content= "<table>
<thead>
<tr><th>Customer</th><th>Age</th><th>A</th></tr>
</thead>
<tbody>
<tr><td>Test 1</td><td>25</td><td><a href='www.google.com'>Link</a></td></tr>
<tr><td>Test 2</td><td>30</td><td><a href='www.yahoo.com'>Link</a></td></tr>
<tr><td>Test 3</td><td>31</td><td><a href='www.rediff.com'>Link</a></td></tr>
...
...
...
</tbody>
</table>

我想在每个包含&lt;a&gt; 标签的&lt;tr&gt; 的最后一个&lt;td&gt; 内容中替换字符串中的内容。

样本行结果:

<tr><td>Test 1</td><td>25</td><td>Action will be taken soon.</td></tr>
<tr><td>Test 2</td><td>30</td><td>Action taken yesterday</td></tr>
...
...

我需要用不同的内容值替换每一行的结果。内容取自表格。只有我想替换的特定客户操作。

CUSTOMER TABLE:
------------------------------------------------------
id    customer    age    action 
------------------------------------------------------
1     Test 1      25     Action will be taken soon
2     Test 2      30     Action taken yesterday
3     Test 3      31     Action will take tomw
4     Kumar       28     Suspended
...
...
...

------------------------------------------------------

使用此表,我在一页中显示了过滤结果,没有操作描述,而不是 &lt;a&gt; 标记。 (此结果是名为 reports.php 的页面的一部分)。 我只想将这些记录与action 字段描述导出到 PDF(我正在使用 HTML 到 PDF 类)。 在该页面中,我已将这些 HTML 值发送到该页面并存储在export_pdf.php 页面中的 PHP 变量($html_content)中......

表格记录不固定大小...它基于生成排序结果。

请任何人帮助我... 提前谢谢...

【问题讨论】:

    标签: php html dom


    【解决方案1】:

    试试下面的代码:

    $html_content= preg_replace("/<a[^>]+\>(.*?)<\/a>/i", "Action will be taken soon.", $html_content); 
    

    query 中有foreach

    foreach($row = mysql_fetch_assoc($result))
    {
        $html_content = preg_replace("/<a[^>]+\>(\w+)<\/a>/i", $row['action'], $html_content); 
    }
    

    输出

    <table>
       <thead>
          <tr><th>Customer</th><th>Age</th><th>A</th></tr>
       </thead>
       <tbody>
          <tr><td>Test 1</td><td>25</td><td>Action will be taken soon.</td></tr>
          <tr><td>Test 2</td><td>30</td><td>Action will be taken soon.</td></tr>
          <tr><td>Test 3</td><td>31</td><td>Action will be taken soon.</td></tr>
       </tbody>
    </table>
    

    【讨论】:

    • 感谢 Bora 您的回复...但我需要结果来用不同的内容值替换每一行。内容取自表格。只有我想替换的特定客户操作。
    • 你能给我一个例子或粘贴问题吗?我会更新
    • Bora:我编辑了这个问题...请看...你能理解吗?
    • 好的,你的替换文本will beyesterday等。文本根据什么变化?你在哪里存储这些文本?在数组中?我必须知道。
    • @Vasu 已更新为 foreach。您可以在从查询中获取结果时替换为foreach
    【解决方案2】:

    你可以通过正则表达式来做到这一点:

    $rgReplace = ['foo', 'bar', 'baz'];
    $i         = 0;
    $html_content=preg_replace_callback('/\<td[^\<\>]*\>\<a[^\<\>]*\>[^\<\>]*\<\/a\>\<\/td\>/', 
    function($rgMatches) use ($rgReplace, &$i)
    {
       return $rgReplace[$i++];
    }, $html_content);
    

    (您的 $rgReplace 是一个具有所需替换的数组)。

    或者,或者,通过DOMDocument API。

    【讨论】:

    • 感谢 Alma Do Mundo 的回复。但我需要结果来用不同的内容值替换每一行。内容取自表格。只有我想替换的特定客户操作。我编辑了问题...请看...
    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2015-09-20
    • 2016-10-15
    • 2023-03-28
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多