Convertir Unicode de nuevo a texto – WordPress JSON api

2 minutos de lectura

Trabajando en un feed de WordPress en un sitio externo y he encontrado un problema con los títulos de las publicaciones que contienen caracteres como comillas simples y guiones.

La salida JSON se ve así:

{"rendered":"Some title post text here – some text after dash"}

{"rendered":"‘Title text in quotes ’: More title text"}

¿Cuál es la mejor manera de volver a convertir estos caracteres Unicode en texto en la interfaz? En este momento está mostrando el Unicode.

Pensando que debe haber una solución javascript. Idealmente, la solución cubriría todas las bases.

  • ¿Has buscado una solución?

    – Andrés Hueso

    30 de junio de 2017 a las 10:59

  • ¡Pero parte del problema es saber qué buscar! Estaba pensando que debe ser un problema común, pero no puedo encontrar mucho al respecto en línea.

    – bien

    30 de junio de 2017 a las 11:21

  • ¿Esto parece ser un recurso útil? ourcodeworld.com/articles/read/188/…

    – bien

    30 de junio de 2017 a las 13:17

Si está trabajando con VUEjs, puede usar la directiva v-html

  • Eres un ángel, ¿lo sabías?

    – Kristoffer Berg – EcodeAS

    21 de febrero de 2020 a las 14:10

Una (algo raro) La forma es usar el navegador para quitar el escape de la cadena: puede insertar la cadena original en un elemento (como HTML) y leer el valor del texto.

Con la ayuda de jQuery:

var result = $("<div/>").html("&#8216;Title text in quotes &#8217;: Dash: &#8211; ").text();

los result luego contiene el texto sin formato sin escape.

Ver este violín de trabajo: http://jsfiddle.net/ppbd58jk/

En realidad, son entidades HTML, puede agregarlas a un elemento HTML y luego volver a leerlas así.

function html_entity_decode(message) {
  var element = document.createElement("div");
  element.innerHTML = message;
  return element.innerHTML;
}
console.log(html_entity_decode("Some title post text here &#8211; some text after dash"));
console.log(html_entity_decode("&#8216;Title text in quotes &#8217;: More title text"));

avatar de usuario de metal_jacke1
metal_jacke1

Hay un paquete NPM que realiza esto y está bien documentado.
HTML a texto

const { convert } = require('html-to-text');

const text = convert('<div>Nope Its not Ashton Kutcher. It is Kevin Malone. <p>Equally Smart and equally handsome</p></div>', {
    wordwrap: 130
});
console.log(text); 
// Results:
// Nope Its not Ashton Kutcher. It is Kevin Malone.

// Equally Smart and equally handsome

Suponiendo que está utilizando un marco de front-end como React:

import { convert } from 'html-to-text';

export function App(props){

return (

  <div>
    <h1>{convert(props.wpData, {wordwrap: null})}</h1>
  </div>

    )}

¿Ha sido útil esta solución?