20.23. Как убрать преформатирование из разметки HTML?
В:
При работе с HTML-разметкой приходится выводить теги отдельными командами *p
, чтобы разметка выводилась в одну строку, но это очень неудобно. Нет ли способа упростить работу с HTML-кодом?
О:
На самом деле у вас в руках уже есть инструмент, позволяющий как угодно упрощать работу с любыми текстовыми данными. В том числе и с HTML-кодом.
Удобнее всего было бы писать HTML-код в том виде, в каком мы его обычно пишем для браузера, т.е. преформатируя, а выводить на экран все HTML-теги в одну строку, чтобы HTML-рендер плеера QSP правильно этот HTML-код интерпретировал.
Решение тут весьма и весьма простое: нужно написать функцию, которая будет обрабатывать наш текст с HTML-разметкой и убирать оттуда символы преформатирования. Наша функция будет называться delPref
, и мы оформим её на отдельной локации:
!@ delPref
local $html=$args[0] & ! помещаем переданный в функцию текст в локальную переменную
local $prevtag, $aftertag & ! задаём дополнительные локальные переменные для удобства
loop local run=1 while run:
! цикл будет выполняться, пока переменной run присвоена единица
$prevtag=$strfind($html,'[\s\r\n]+<') & ! получаем символы преформатирования до начала тега и левую угловую скобку
$aftertag=$strfind($html,'>[\s\r\n]+') & ! получаем правую угловую скобку и символы преформатирования после тега
if $prevtag<>'':
! если символы до тега получены
$html=$replace($html,$prevtag,'<')
elseif $aftertag<>'':
! если получены символы после тега
$html=$replace($html,$aftertag,'>')
else
! если символы преформатирования около тега не найдены
run=0
end
end
$result=$trim($html)
Теперь, когда нам нужно вывести на экран HTML, мы просто прогоняем его через функцию:
$html = '<qhtml>
<table border=1>
<tr>
<td width=25% bgcolor=#ffffee>
Некий текст
</td>
<td>Ещё текст</td>
</tr>
<tr>
<td width=25% bgcolor=#ffffee>
Вторая строка
</td>
<td>12345677 < ></td>
</tr>
</table>
</qhtml>'
@delPref($html)