texto que para escape convertir convert cadena html bash html-escape-characters

que - php string to html tags



Script Bash para convertir de entidades HTML a caracteres (6)

Estoy buscando una manera de convertir esto:

hello < world

a esto:

hello < world

Podría usar sed, pero ¿cómo se puede lograr esto sin usar expresiones regex crípticas?


Con perl:

cat foo.html | perl -MHTML::Entities -pe ''decode_entities($_);''

Con php desde la línea de comando:

cat foo.html | php -r ''while(($line=fgets(STDIN)) !== FALSE) echo html_entity_decode($line, ENT_QUOTES|ENT_HTML401);''


Esta respuesta se basa en: ¿ forma corta de escaparse de HTML en Bash? que funciona bien para capturar respuestas (usando wget ) en Stack Exchange y convertir HTML a caracteres ASCII normales:

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

Editar 1: 7 de abril de 2017: se agregó la comilla doble a la izquierda y la doble a la derecha. Esto es parte de la secuencia de comandos bash que rastrea las respuestas de SE y las compara con los archivos de códigos locales aquí: Pregunte a Ubuntu - Code Version Control entre los archivos locales y las respuestas de Ask Ubuntu

Editar 26 de junio de 2017

El uso de sed ~ 3 segundos en convertir HTML a ASCII en un archivo de línea 1K de Ask Ubuntu / Stack Exchange. Como tal, me vi obligado a utilizar la función de búsqueda integrada de Bash y reemplazarlo por ~ 1 segundo de tiempo de respuesta.

Aquí está la función:

#------------------------------------------------------------------------------- LineOut="" # Make global HTMLtoText () { LineOut=$1 # Parm 1= Input line # Replace external command: Line=$(sed ''s/&amp;//&/g; s/&lt;//</g; # s/&gt;//>/g; s/&quot;//"/g; s/&#39;//'"''"''/g; s/&ldquo;//"/g; # s/&rdquo;//"/g;'' <<< "$Line") -- With faster builtin commands. LineOut="${LineOut//&nbsp;/ }" LineOut="${LineOut//&amp;/&}" LineOut="${LineOut//&lt;/<}" LineOut="${LineOut//&gt;/>}" LineOut="${LineOut//&quot;/''"''}" LineOut="${LineOut//&#39;/"''"}" LineOut="${LineOut//&ldquo;/''"''}" # TODO: ASCII/ISO for opening quote LineOut="${LineOut//&rdquo;/''"''}" # TODO: ASCII/ISO for closing quote } # HTMLtoText ()



Una alternativa es canalizar a través de un navegador web, como por ejemplo:

echo ''&#33;'' | w3m -dump -T text/html

Esto funcionó muy bien para mí en cygwin, donde descargar e instalar distribuciones es difícil.

Esta respuesta fue encontrada here


Una versión de Python 3.2+:

cat foo.html | python3 -c ''import html, sys; [print(html.unescape(l), end="") for l in sys.stdin]''


Usando xmlstarlet:

echo ''hello &lt; world'' | xmlstarlet unesc