Ob_start过滤关闭<script>标签错误

时间:2019-08-19 12:13:56

标签: php

我正在使用ob_start过滤WordPress后端页面。 我的脚本如下:

function remove_extra_field_profile()

{

    $current_file_url =  preg_replace( "#\?.*#" , "" , basename( $_SERVER['REQUEST_URI'] ) );

    if( $current_file_url == "profile.php" )
    {
        add_action( 'wp_loaded', function(){ ob_start("profile_callback"); } );
        add_action( 'shutdown', function(){ ob_end_flush(); } );
    }
}
add_action( 'init', 'remove_extra_field_profile' );


function profile_callback( $html )
{
    $profile_dom = new DOMDocument;
    $profile_dom->loadHTML( $html );

    $all_lines = $profile_dom->getElementsByTagname( 'tr' );

    $excludes = array(
        'user-syntax-highlighting-wrap',
        'user-rich-editing-wrap'
        );

    $deletes = array();

    foreach ( $all_lines as $line ) 
    {
        $tr_calss = $line->getAttribute("class");

        if( in_array( $tr_calss, $excludes ) )
        {
            $deletes[] = $line;
        }
    }

    $deletes[] = $profile_dom->getElementsByTagname( 'h2' )->item(0);

    foreach ($deletes as $delete) 
    {
        $delete->parentNode->removeChild( $delete );
    }

    return $profile_dom->saveHTML();
}

这很好。

但是一旦我添加了一个插件,该插件向profile.php添加了一个选择字段(wordpress自动添加了一些内容),事情就会变得很奇怪:

使用上方的“过滤脚本”,关闭的</script>标签(应该在末尾)将向前移动:

<script type="text/html" id="tmpl-media-frame">
        <div class="media-frame-menu"></script></div>
        <div class="media-frame-title"></div>
        <div class="media-frame-router"></div>
        <div class="media-frame-content"></div>
        <div class="media-frame-toolbar"></div>
        <div class="media-frame-uploader"></div>

一旦我删除了PHP脚本,一切都很好。

为什么脚本会影响此<script>部分?我可以做些什么?

非常感谢!

0 个答案:

没有答案