Настройте HTML Tidy так, чтобы он игнорировал начальные и конечные теги PHP в атрибутах HTML - PullRequest
4 голосов
/ 11 августа 2009

Как я могу сохранить HTML Tidy от преобразования коротких тегов PHP, когда они используются в качестве значений в атрибутах HTML?

Вот пример того, что он в настоящее время делает. Он преобразует это:

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

к этому:

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

Я хочу, чтобы HTML Tidy игнорировал короткие теги PHP. Какие-либо параметры конфигурации, которые меняют это?

==

Чтобы упростить, можно ли использовать HTML Tidy, просто избегая преобразования сущностей HTML? Если бы он не конвертировал <и>, это решило бы мою проблему.

Ответы [ 4 ]

1 голос
/ 14 августа 2009

Необработанный PHP не совместим с HTML (за исключением нескольких наиболее тривиальных случаев), и Tidy имеет только поверхностную поддержку.

Существует множество способов, которыми Tidy может вызвать ошибки в документе, потому что он не поймет, что генерирует PHP и как он взаимодействует с другой разметкой.

Чтобы получить правильные и надежные результаты, вы должны постобработать вывод только в формате HTML. Вы можете сделать это, добавив фильтр Tidy в PHP:

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

Это повлияет на производительность во время выполнения, но для большинства сайтов это не проблема, поскольку Tidy работает довольно быстро.

1 голос
/ 12 августа 2009

Даже если это можно сделать 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#> внутри файла, вторая запускает приборку на месте и обновляет файл, Третья строка преобразует <# $ variable #> обратно в <?=$variable>.

0 голосов
/ 11 апреля 2011

Быстрый способ - просто заменить все <?= на <?php echo

0 голосов
/ 16 августа 2009

Вы можете предварительно обработать ваш php:

путем добавления комментариев путем преобразования <? в <!--<? и ?> в ?>-->

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

станет

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

после запуска HTMLtidy вы бы поступили наоборот.

  1. предварительная обработка путем добавления тегов комментариев
  2. запустить HTMLtidy
  3. ип-пра-процесс ...
...