PHP Tidy删除空格并插入换行符

han*_*ker 7 php xml whitespace space tidy

在将其加载到DomDocument之前,我想使用PHP Tidy来确保我的xml有效.

但是,我不想让Tidy改变我的格式 - 我只希望它能修复像不平衡标签等问题.

可以在此页面上看到该问题的一个示例:http://www.tek-tips.com/viewthread.cfm?qid = 1654452

我自己的例子如下.

输入:( <ex><context>????<stress>?</stress>???</context> ??????<stress>?</stress>??? — <stress>aa</stress>ndeelhoudersvergadering</ex>已经是有效的xml)

预期输出:( 和<ex><context>????<stress>?</stress>???</context> ??????<stress>?</stress>??? — <stress>aa</stress>ndeelhoudersvergadering</ex> 之间有空格)</context>??????

实际产量:

<ex>
<context>????
<stress>?</stress>???</context>??????
<stress>?</stress>??? — 
<stress>aa</stress>ndeelhoudersvergadering</ex>
Run Code Online (Sandbox Code Playgroud)

(它删除了之间的空格</context>,??????这将使文本不可读,并在每个标记后插入换行符)

我的代码是:

function TidyXml($inputXml)
    {
        $config = array(
            'indent'         => false,
            'output-xml'     => true,
            'input-xml'     => true,
        );

        $tidy = new tidy();
        $tidy->parseString($inputXml, $config, 'utf8');
        $tidy->cleanRepair();
        $cleanXml = tidy_get_output($tidy);
        return $cleanXml;
    }
Run Code Online (Sandbox Code Playgroud)

我尝试改变了几个选项,但没有成功.

han*_*ker 5

我找到了一个解决方案,但它有点黑客,所以我仍然愿意寻求更好的建议。

放置<pre>您想要验证的 xml(这指示 Tidy 不要更改空格),然后修复 xml,将 output-html 设置为 true,然后删除<pre>\n换行符。

例子:

$config = array(
    'indent' => false,
    'indent-attributes' => false,
    'output-html' => true,
    'input-xml' => true,
    'wrap' => 0,  
    'vertical-space' => false,  
    'new-inline-tags' => 'context,abr,stress',  
    'new-blocklevel-tags'   => 'def,ex,examples'
);

$tidy = new tidy();
$inputXml = "<pre>" . $inputXml . "</pre>";
$validXml = $tidy->repairString($inputXml, $config, 'utf8');
$cleanXml = str_replace("\n", "", $validXml);
$cleanXml = substr($cleanXml, strlen("<pre>"), strlen($cleanXml));  
$cleanXml = substr($cleanXml, 0, strlen($cleanXml)-strlen("</pre>"));
Run Code Online (Sandbox Code Playgroud)