如果在用作html属性中的值时,如何保持HTML Tidy转换PHP短标记?
以下是目前的例子。它将此转换为:
<input value='<?=$variable?>'>
到此:
<input value='<?=$variable?>'>
我希望HTML Tidy忽略PHP短标签。任何改变这个的配置选项?
==
为了简化,有没有办法让HTML Tidy避免进行HTML实体转换?如果它不会转换&lt;和&gt;,这将解决我的问题。
答案 0 :(得分:1)
即使可以完成Tidy
与php
无效 - 如果您的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之后,你会做相反的事情。
答案 3 :(得分:-1)
快速方法是将所有<?=
替换为<?php echo