PHP在HTML标记中找到某些字符并用字符串替换整个标记

时间:2016-05-13 15:10:11

标签: php html regex tags

我从我的sql表中提取了一个字符串值,如下所示:

<p>Commodity Exchange on 5 April 2016 settled as following graph:</p> 
<p><img alt=\"\" src=\"ckeditor/plugins/imageuploader/uploads/986dfdea.png\" 
style=\"height:163px; width:650px\" /></p></p> 
<p>end of string</p>

我希望在html标记内获取图像名称​​ 986dfdea.png (因为字符串中有很多<p></p>个标记,我想知道这个标记包含图像),并用符号替换整个标记内容,如'#image1'。

最终会变成这样:

<p>Commodity Exchange on 5 April 2016 settled as following graph:</p> 
#image1 
<p>end of string</p>

我正在为移动应用开发API,但是拥有PHP的宝贝技能,仍然无法通过参考这些参考来实现我的目标:

PHP/regex: How to get the string value of HTML tag?

How to extract img src, title and alt from html using php?

请帮忙。

1 个答案:

答案 0 :(得分:3)

是的,您可以使用正则表达式,但您需要更少的代码,但我们Accounts.findUserByUsername(),所以这就是您所需要的:

  1. 您的字符串包含无效的html(</p></p>),因此我们使用 tidy_repair_string要清理它。
  2. 使用DOMXpath()查询p标记内的img标记
  3. 删除所有额外的",并使用getAttribute("src")basename
  4. 获取图片文件名
  5. 使用图片createTextNode
  6. 的值创建新的#imagename
  7. 使用replaceChildp内部图片替换为上面创建的新createTextNode
  8. 清除由!DOCTYPE
  9. 自动生成的htmlbodynew DOMDocument();代码
    <?php
    $html = <<< EOF
    <p>Commodity Exchange on 5 April 2016 settled as following graph:</p>
    <p><img alt=\"\" src=\"ckeditor/plugins/imageuploader/uploads/986dfdea.png\"
    style=\"height:163px; width:650px\" /></p></p>
    <p>end of string</p>
    EOF;
    
    
    
    $html = tidy_repair_string($html,array(
                               'output-html'   => true,
                               'wrap'           => 80,
                               'show-body-only' => true,
                               'clean' => true,
                               'input-encoding' => 'utf8',
                               'output-encoding' => 'utf8',
                                              ));
    
    
    $dom = new DOMDocument();
    $dom->loadHtml($html);
    
    
    
    $x = new DOMXpath($dom);
    foreach($x->query('//p/img') as $pImg){
        //get image name
        $imgFileName = basename(str_replace('"', "", $pImg->getAttribute("src")));
        $replace = $dom->createTextNode("#$imgFileName");
        $pImg->parentNode->replaceChild($replace, $pImg);
        # loadHTML causes a !DOCTYPE tag to be added, so remove it:
        $dom->removeChild($dom->firstChild);
        # it also wraps the code in <html><body></body></html>, so remove that:
        $dom->replaceChild($dom->firstChild->firstChild, $dom->firstChild);
        echo str_replace(array("<body>", "</body>"), "", $dom->saveHTML());
    
    }
    

    <强>输出:

    <p>Commodity Exchange on 5 April 2016 settled as following graph:</p>
    <p>#986dfdea.png</p>
    <p>end of string</p>
    

    shouldn't parse html with a regex