dongluolie3487 2014-10-30 14:18
浏览 46
已采纳

替换HTML代码块中的单词而不更改HTML

Let's say I have block of HTML where I want to do a find and replace on the content before echoing out to the screen.

How do I ensure I don't change the HTML but just change the content (in PHP).

For example, if I had this:

<div class='Hello'>Hello</div>

and I wanted to replace all the 'Hello' words in the content with 'Hi' I would want to get this result:

<div class='Hello'>Hi</div>

At the moment I am using preg_replace, e.g.

$new_code = preg_replace(array("/Hello/"), array("Hi"), $code);

But this would give me the result

<div class='Hi'>Hi</div>
  • 写回答

4条回答 默认 最新

  • duanji1026 2014-10-30 18:11
    关注

    Don't use regex to find text in HTML use a DOM parser instead:

    You could use DomDocument but be careful it will do strange things with partial HTML, but here's an example to get you going:

    $dom = new DOMDocument();
    $dom->loadHTML("<html><body><p>Hello</p></body></html>");
    
    $els = $dom->getElementsByTagName('*');
    
    foreach ( $els as $el ) {
    
        if (preg_replace("/Hello/","Hi",$el->nodeValue))
        {
            $el->nodeValue =preg_replace("/Hello/","Hi",$el->nodeValue);
        }
    
    } 
    
    echo $dom->saveHTML();
    

    or Simple HTML DOM may meet your needs:

    Example from site:

    $html = str_get_html('<div class='Hello'>Hello</div>');
    
    $html->find('div', 0)->innertext = 'Hi';
    
    echo $html;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值