警告::DOMDocument::loadHTML():在向POST图像添加类时,在unctions.php中作为输入提供的空字符串

时间:2017-07-11 作者:alejuu

因此,我使用这段代码为帖子和页面内容中加载的所有图像添加了一个额外的类,一切正常,但如果没有图像,我会收到错误,有时还会在加载图像之前加载错误。

这是代码

function add_img_post_class($content){
    $content = mb_convert_encoding($content, \'HTML-ENTITIES\', "UTF-8");
    $document = new DOMDocument();
    libxml_use_internal_errors(true);
    $document->loadHTML(utf8_decode($content));
    $imgs = $document->getElementsByTagName(\'img\');
    foreach ($imgs as $img) {
       $existing_class = $img->getAttribute(\'class\');
       $img->setAttribute(\'class\',"$existing_class post-image lazy-load o-image");
    }
    $html = $document->saveHTML();
    return $html;
}
add_filter (\'the_content\', \'add_img_post_class\');
错误似乎出现在第5行:

$document->loadHTML(utf8_decode($content));

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

下面是代码的更新版本,通过添加将返回的简单检查来避免警告$content 如果是空字符串,则未修改。

原始代码添加<html> 修改后的标记(检查页面源代码),这是我们不想要的。下面的代码也解决了这个问题。

add_filter( \'the_content\', \'wpse_add_img_post_class\' );
function wpse_add_img_post_class( $content ) {
    // Bail if there is no content to work with.
    if ( ! $content ) {
        return $content;
    }

    // Create an instance of DOMDocument.
    $dom = new \\DOMDocument();

    // Supress errors due to malformed HTML.
    // See http://stackoverflow.com/a/17559716/3059883
    $libxml_previous_state = libxml_use_internal_errors( true );

    // Populate $dom with $content, making sure to handle UTF-8.
    // Also, make sure that the doctype and HTML tags are not added to our
    // HTML fragment. http://stackoverflow.com/a/22490902/3059883
    $dom->loadHTML( mb_convert_encoding( $content, \'HTML-ENTITIES\', \'UTF-8\' ),
          LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );

    // Restore previous state of libxml_use_internal_errors() now that we\'re done.
    libxml_use_internal_errors( $libxml_previous_state );

    // Create an instance of DOMXpath.
    $xpath = new \\DOMXpath( $dom );

    // Get images then loop through and add additional classes.
    $imgs = $xpath->query( "//img" );
    foreach ( $imgs as $img ) {
        $existing_class = $img->getAttribute( \'class\' );
        $img->setAttribute( \'class\', "{$existing_class} post-image lazy-load o-image" );
    }

    // Save and return updated HTML.
    $new_content = $dom->saveHTML();
    return $new_content;
}

结束

相关推荐

在PHP中使用Base64和JSON编码数组,作为HTML数据属性,在JavaScript中进行解码和解析。带着适当的逃生

我希望在正确转义的同时将任意数组从PHP传递到JavaScript。我倾向于使用base64,我认为base64不是数据属性安全的,所以作为一名优秀的开发人员,我是esc\\u attr the data。是否有right 如何确保base64数据在JavaScript中保持其完整性?这是一个精心设计的示例,效果很好,因为esc\\u attr不会修改base64编码的完整性。<?php $array = [ [ \'the\' =>