PHP HTML Tidy:缓冲区大小限制
我试图使用HTML Tidy实现,它是PHP()的一部分,以便重新格式化一大块HTML。我遇到了一个问题,Tidy将输出截断超过某个点(约8K) 当我创建一个大约10公里长的字符串并将其交给tidy_repair_字符串时,如下所示:PHP HTML Tidy:缓冲区大小限制,php,htmltidy,Php,Htmltidy,我试图使用HTML Tidy实现,它是PHP()的一部分,以便重新格式化一大块HTML。我遇到了一个问题,Tidy将输出截断超过某个点(约8K) 当我创建一个大约10公里长的字符串并将其交给tidy_repair_字符串时,如下所示: $output = tidy_repair_string($output, array( 'indent' => true, // enforce indentation 'hide-comments' => true, // Re
$output = tidy_repair_string($output, array(
'indent' => true, // enforce indentation
'hide-comments' => true, // Remove the comments
'wrap' => 100, // Break each line after 100 chars
'output-html' => true, // Output as HTML
'char-encoding' => $encoding // The input/output encoding
), $encoding);
我删掉了8070个字符后的所有内容。如果我在字符串的开头加上(比如)10个字符,那么末尾正好剩下10个字符。有没有办法更改tidy_repair_字符串的缓冲区大小,使其更大? 看看这里似乎没有一个配置选项,谷歌显然没有什么帮助/我的谷歌fu让我失望了,关于这方面的文档也不多。任何帮助都将不胜感激
编辑:我正在Windows 7上使用xampp-portable-lite-win32-1.8.1-VC9。即使我将php.ini更改为使用memory_limit=900M,这个问题仍然会发生。好吧,我可以想出几个可能失败的原因
echo$(python-c'print 20000*“a”)>测试文件
。因为char是1字节,所以这个命令应该为我们创建一个20K的文件。显然,这不会用tidy验证,但我可以在程序中抛出一些不错的垃圾文本。现在使用tidy
将它输入到tidy(如果命令行上没有tidy,sudo apt get install tidy
)。对我来说,这不会失败,但也许可以尝试一下。如果它没有失败,那么它不是特定于引导的bash程序
*现在我们已经排除了php.ini和实际的bash-tidy程序的问题<?PHP
$output = tidy_repair_file("test_file");
print strlen($output);
?>
<?PHP
$data = readfile("test_file"); //read a 20K file into active memeory
$encoding = "ascii"; //I just set my encoding to 'ascii' because I like it...
$output = tidy_repair_string($data, array(
'indent' => true, // enforce indentation
'hide-comments' => true, // Remove the comments
'wrap' => 100, // Break each line after 100 chars
'output-html' => true, // Output as HTML
'char-encoding' => $encoding // The input/output encoding
), $encoding);
print strlen($output);
?>
对于tidy_repair_文件strlen,我得到了20111(其中额外的111个字符来自tidy格式,没有截断)。
然后我尝试将它读入活动内存,并将其解析为字符串
<?PHP
$output = tidy_repair_file("test_file");
print strlen($output);
?>
<?PHP
$data = readfile("test_file"); //read a 20K file into active memeory
$encoding = "ascii"; //I just set my encoding to 'ascii' because I like it...
$output = tidy_repair_string($data, array(
'indent' => true, // enforce indentation
'hide-comments' => true, // Remove the comments
'wrap' => 100, // Break each line after 100 chars
'output-html' => true, // Output as HTML
'char-encoding' => $encoding // The input/output encoding
), $encoding);
print strlen($output);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
20001
</body>
</html>
20001
当我做了一些错误的事情时,这个输出确实告诉我,我正在解析一个20K的文件而没有截断
还值得注意的是,我在提示符下使用php test.php
并通过web浏览器运行了这段代码。我得到了相同的结果。没有截断。我还需要注意的是,我在Ubuntu服务器上运行这段代码,而不是在Windows IIS上运行
尝试将变量输出到文件,然后对其运行tidy_repair_file()。显然,此解决方案是不可持续的,不会扩展,但它会通知您原始字符串是否有问题
另外,在tidy调用前后尝试在$output上运行strlen()——确保字符串在到达tidy之前是10K字符串……这是一个正常检查
祝你好运,我希望这能有所帮助!可以保存到文件和解析文件中,而不是字符串?哇!非常感谢你全面、周到的回复!(我希望我有更多的投票:)。我用来测试这个问题的代码位于。步骤#1:我尝试将内存限制更改为900MB,在php.ini中使用memory#limit=900M。它还在发生。第2步:我不确定如何从命令行运行HTMLTidy,以便它使用php使用的php#u tidy.dll。第三步:你的帖子提醒我,我可能应该指定我在Windows上使用的平台-XAMPP。我会去编辑原来的帖子,把它弄清楚。