4

当用作 html 属性中的值时,如何防止 HTML Tidy 转换 PHP 短标签?

这是它当前所做的一个示例。它转换这个:

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

对此:

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

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

==

为了简化,有没有办法让 HTML Tidy 避免进行 HTML 实体转换?如果它只是不转换<和>,那将解决我的问题。

4

4 回答 4

1

即使它可以完成Tidy也不能很好地工作- 如果您的代码包含引号等php,它可能会窒息。如果它们由.phpTidyphp

您可以在运行之前全部替换<?$variable?>为,然后将它们替换回来。在控制台中,例如这样:<#$variable#>Tidy

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

第一行转换<?=$variable?><#$variable#>内部文件,第二行在原地运行并更新文件,第三行将 <#$variable#> 转换回<?=$variable>.

于 2009-08-12T05:44:28.563 回答
1

未处理的 PHP 与 HTML 不兼容(除了少数最琐碎的情况),Tidy 对它的支持只是肤浅的。

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

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

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

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

于 2009-08-14T12:06:05.640 回答
0

你可以预处理你的php:

通过转换<?<!--<??>来添加评论?>-->

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

会成为

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

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

  1. 通过添加注释标签进行预处理
  2. 运行 HTMLtidy
  3. 取消预处理...
于 2009-08-15T22:04:24.090 回答
-1

一种快速的方法是将所有替换<?=<?php echo

于 2011-04-11T14:28:09.270 回答