配置HTML Tidy以在html属性内部忽略PHP短开始和结束标记

时间:2009-08-11 19:30:01

标签: php htmltidy

如果在用作html属性中的值时,如何保持HTML Tidy转换PHP短标记?

以下是目前的例子。它将此转换为:

<input value='<?=$variable?>'>

到此:

<input value='&lt;?=$variable?&gt;'>

我希望HTML Tidy忽略PHP短标签。任何改变这个的配置选项?

==

为了简化,有没有办法让HTML Tidy避免进行HTML实体转换?如果它不会转换&lt;和&gt;,这将解决我的问题。

4 个答案:

答案 0 :(得分:1)

即使可以完成Tidyphp无效 - 如果您的php代码包含引号等,它可能会阻塞。Tidy可能如果php输出缺失属性,则抛出警告。

您可以在运行<?$variable?>之前将所有<#$variable#>替换为Tidy,然后将其替换回来。 在控制台中,例如:

sed -i 's/<?=\(.*\)?>/<#\1#>/g' yourfile.php
tidy -m yourfile.php
sed -i 's/<#\(.*\)#>/<?=\1?>/g' yourfile.php

第一行将<?=$variable?>转换为文件内的<#$variable#>, 第二个运行整洁并更新文件, 第三行转换&lt;#$ variable#&gt;回到<?=$variable>

答案 1 :(得分:1)

未经处理的PHP与HTML不兼容(除了极少数最简单的案例),而且Tidy只有表面支持。

Tidy可以通过无数种方式在文档中实际导致错误,因为它无法理解PHP生成的内容以及它与其他标记的交互方式。

要获得正确可靠的结果,您应该对仅HTML输出进行后处理。您可以通过在PHP中添加Tidy过滤器来实现:

<?php
ob_start('ob_tidyhandler');
?>

这会影响运行时性能,但对于大多数网站来说这不是问题,因为Tidy非常快。

答案 2 :(得分:0)

你可以预处理你的php:

通过将<?转换为<!--<?,将?>转换为?>-->

来添加评论

<input value='<?=$variable?>'>

会变成

<input value='<!--<?=$variable?>-->'>

运行HTMLtidy之后,你会做相反的事情。

  1. 通过添加评论标签进行预处理
  2. 运行HTMLtidy
  3. 未预处理...

答案 3 :(得分:-1)

快速方法是将所有<?=替换为<?php echo