bash html-entities

¿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''


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''


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.