Ob_start筛选关闭 <script> 标记错误

Ob_start filtering closes <script> tag wrong

提问人:Clms 提问时间:8/19/2019 更新时间:8/19/2019 访问量:89

问:

我正在使用 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会自动添加某些内容),事情就会变得奇怪:

有了上面的“filtering-script”,结束标记(应该在末尾)将向前移动:</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>

多谢!

PHP的

评论

0赞 Ingus 8/19/2019
为什么需要内部标签?div<script>
0赞 Clms 8/19/2019
我不知道,它来自 WordPress - 无论我使用什么插件,一旦有一个上传字段(由 WordPress 创建),它就会像那样显示。
0赞 Clms 8/19/2019
@Ingus 看:github.com/WordPress/WordPress/blob/......

答: 暂无答案