Подтвердить что ты не робот

Короткий способ избежать HTML в Bash?

В коробке нет Ruby/Python/Perl и т.д.

Только bash, sed и awk.

Можно заменить символы на карту, но это становится утомительным.

Возможно, какая-то встроенная функциональность, о которой я не знаю?

4b9b3361

Ответ 1

Экранирование HTML действительно просто связано с заменой трех символов: <, > и &. Для дополнительных точек вы также можете заменить " и '. Итак, это не длинный sed script:

sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'

Ответ 2

Вы можете использовать утилиту recode:

    echo 'He said: "Not sure that - 2<1"' | recode ascii..html

Вывод:

    He said: &quot;Not sure that - 2&lt;1&quot;

Ответ 3

Чистый bash, без внешних программ:

function htmlEscape () {
    s=${1//&/&amp;}
    s=${s//</&lt;}
    s=${s//>/&gt;}
    s=${s//'"'/&quot;}
    echo $s
}

Простая подстановка строк.

Ответ 5

Предыдущая замена sed портит действительный вывод, например

&lt;

в

&amp;lt;

Добавление отрицательной обратной связи, так что "&" изменяется только на "& amp;" если после этого "&" еще не стоит "amp;" исправляет это:

sed 's/&(?!amp;)/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'