Php аккуратные и текстовые области

Я использую tidy для очистки и форматирования вывода HTML, сгенерированного движок шаблонов twig.

Я использую следующую конфигурацию для аккуратного:

$config = array('indent' => TRUE, 'output-html' => TRUE, 'wrap' => 0);

Все работает хорошо и хорошо, за исключением тех случаев, когда мы добираемся до текстовых полей.

Вот неочищенный фрагмент:

<textarea id="words"
         rows="10"       cols="50"                  >sdfds</textarea>

Хотя форматирование очень беспорядочное, в текстовой области выводится правильное значение: «sdfds» без пробелов до или после.

Это очищенный формат после использования tidy:

                <textarea id="words" name="words" rows="10" cols="50" title="prompt">
sdfds
</textarea>

Как видно, разметка теперь намного аккуратнее, но tidy ввел разрыв строки после «sdfds», что означает, что курсор теперь указывает на строку после «sdfds» при просмотре в браузере.

Это довольно раздражает, и я не уверен, как с этим справиться. Я бы все равно хотел, чтобы тег textarea был очищен, но я бы предпочел, чтобы он был отформатирован следующим образом:

<textarea id="words" name="words" rows="10" cols="50" title="prompt">sdfds</textarea>

Кто-нибудь занимался этим вопросом раньше? Если да, то как я могу аккуратно не вводить эти пробелы для тега textarea?


person F21    schedule 04.10.2011    source источник


Ответы (4)


Если sdfds выводится с помощью php, вам нужно будет добавить еще один параметр конфигурации.

 $config = array('indent' => TRUE, 'output-html' => TRUE, 'wrap' => 0, 'wrap-php' => 0);

Wrap беспокоится только о html, а любые операторы php обрабатываются как новая строка. Для получения дополнительной информации о параметрах конфигурации вы можете посетить: http://tidy.sourceforge.net/docs/quickref.html

person James Williams    schedule 04.10.2011
comment
К сожалению, sdfds не генерируется php. HTML генерируется веткой в ​​виде строки. - person F21; 04.10.2011
comment
Twig добавляет php-код для эха данных из файла или базы данных. Добавьте wrap-php, если это не работает, замените 0 на false. - person James Williams; 04.10.2011
comment
Я пробовал использовать 0 и False для параметра wrap-php, но все равно получаю тот же результат. Возможно, это связано с тем, что текстовая область извлекается из другого файла шаблона ветки с использованием block(). - person F21; 04.10.2011

Когда вы используете indent => true, вы испортите texareas с tidy. Это становится аккуратным, потому что даже значение textareas имеет отступ. Если вы хотите, чтобы ваши текстовые поля отображались правильно, вы можете просто установить отступ => false. Это упорядочит ваш HTML, но также оставит текстовое поле с тем же значением после применения tidy. Я видел, что есть некоторые патчи, которые решают проблему, но тогда вы должны скомпилировать приборку самостоятельно. Вы также можете сделать это с помощью PHP, но тогда вы наведете порядок.

person dennis    schedule 05.10.2011
comment
Я все еще вижу ту же проблему с indent => false. Я также пытался установить output-html на true или false, но все еще вижу ту же проблему. - person F21; 06.10.2011
comment
@phpdev Это верно для вывода html, где tidy добавит новую строку перед точным значением текстовой области. Это можно решить, используя output-xml =› true вместо output-html =› true. - person dennis; 06.10.2011
comment
Спасибо, Деннис. Кажется, это решило проблему, но затем появилось еще одна! Из-за того, что output-xml добавляет закрывающий тег, <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> теперь <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>, теперь это не может быть проверено как HTML 4.01 Strict: using XHTML-style self-closing tags (such as <meta ... />) in HTML 4.01 or earlier. To fix, remove the extra slash ('/') character. For more information about the reasons for this, see Empty elements in SGML, HTML, XML, and XHTML. - person F21; 06.10.2011

Tidy иногда может быть "грязным" и нуждается в дальнейшей доработке с помощью rexep, вот обходной путь, который поместит курсор в ту же строку в окончательном выводе, поэтому удобство использования не пострадает. Просто запустите свой приведенный в порядок html корыто:

$subject = preg_replace('%(\r\n|\n)(?=</textarea>)%sim', '', $subject);
person mangefort    schedule 13.12.2011

Просто используйте функцию обрезки для текстовой области. И вы получите то, что ищете

person user1635914    schedule 06.11.2012