¿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/&//&/g; s/<//</g; s/>//>/g; s/"//"/g; s/''"''"''//'/g''
No puedo comentar aún, así que aquí hay una nueva respuesta:
El reemplazo de sed anterior desfigura la salida válida como
<
dentro
&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;)//&/g; s/<//</g; s/>//>/g; s/"//"/g; s/''"''"''//'/g''
Puedes usar la utilidad recode
:
echo ''He said: "Not sure that - 2<1"'' | recode ascii..html
Salida:
He said: "Not sure that - 2<1"
Pure bash, no hay programas externos:
function htmlEscape () {
s=${1//&/&}
s=${s//</<}
s=${s//>/>}
s=${s//''"''/"}
echo $s
}
Simplemente simple sustitución de cuerdas.