¿Corta manera de escapar de HTML en Bash?




html-entities (4)

La caja no tiene Ruby / Python / Perl etc.

Sólo bash , sed , y awk .

Una forma es reemplazar los caracteres por el mapa, pero se vuelve tedioso.

Tal vez alguna funcionalidad incorporada que no conozco?


Escapar de HTML realmente implica reemplazar tres caracteres: < , > y & . Para obtener puntos extra, también puede reemplazar " y ' . Por lo tanto, no es un script largo de sed :

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

Puedes usar la utilidad recode :

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

Salida:

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

Pure bash, no hay programas externos:

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

Simplemente simple sustitución de cuerdas.


No puedo comentar aún, así que aquí hay una nueva respuesta:

El reemplazo de sed anterior desfigura la salida válida como

&lt;

dentro

&amp;lt;

Agregando una vista negativa negativa por lo que "&" solo se cambia a "& amp;" si ese "&" no es seguido por "amp;" arregla que:

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




html-entities