me preguntaba si hay una función MYSQL para decodificar texto con entidades html. He visto algunos enfoques usando REEMPLAZAR, pero parece un poco difícil administrar todas las entidades.¿hay una función mysql para decodificar entidades html?
Respuesta
puede crear la función, como a continuación
DELIMITER $$
DROP FUNCTION IF EXISTS `HTML_UnEncode`$$
CREATE FUNCTION `HTML_UnEncode`(X VARCHAR(255)) RETURNS VARCHAR(255) CHARSET latin1 DETERMINISTIC
BEGIN
DECLARE TextString VARCHAR(255) ;
SET TextString = X ;
#quotation mark
IF INSTR(X , '"')
THEN SET TextString = REPLACE(TextString, '"','"') ;
END IF ;
#apostrophe
IF INSTR(X , ''')
THEN SET TextString = REPLACE(TextString, ''','"') ;
END IF ;
#ampersand
IF INSTR(X , '&')
THEN SET TextString = REPLACE(TextString, '&','&') ;
END IF ;
#less-than
IF INSTR(X , '<')
THEN SET TextString = REPLACE(TextString, '<','<') ;
END IF ;
#greater-than
IF INSTR(X , '>')
THEN SET TextString = REPLACE(TextString, '>','>') ;
END IF ;
#non-breaking space
IF INSTR(X , ' ')
THEN SET TextString = REPLACE(TextString, ' ',' ') ;
END IF ;
#inverted exclamation mark
IF INSTR(X , '¡')
THEN SET TextString = REPLACE(TextString, '¡','¡') ;
END IF ;
#cent
IF INSTR(X , '¢')
THEN SET TextString = REPLACE(TextString, '¢','¢') ;
END IF ;
#pound
IF INSTR(X , '£')
THEN SET TextString = REPLACE(TextString, '£','£') ;
END IF ;
#currency
IF INSTR(X , '¤')
THEN SET TextString = REPLACE(TextString, '¤','¤') ;
END IF ;
#yen
IF INSTR(X , '¥')
THEN SET TextString = REPLACE(TextString, '¥','¥') ;
END IF ;
#broken vertical bar
IF INSTR(X , '¦')
THEN SET TextString = REPLACE(TextString, '¦','¦') ;
END IF ;
#section
IF INSTR(X , '§')
THEN SET TextString = REPLACE(TextString, '§','§') ;
END IF ;
#spacing diaeresis
IF INSTR(X , '¨')
THEN SET TextString = REPLACE(TextString, '¨','¨') ;
END IF ;
#copyright
IF INSTR(X , '©')
THEN SET TextString = REPLACE(TextString, '©','©') ;
END IF ;
#feminine ordinal indicator
IF INSTR(X , 'ª')
THEN SET TextString = REPLACE(TextString, 'ª','ª') ;
END IF ;
#angle quotation mark (left)
IF INSTR(X , '«')
THEN SET TextString = REPLACE(TextString, '«','«') ;
END IF ;
#negation
IF INSTR(X , '¬')
THEN SET TextString = REPLACE(TextString, '¬','¬') ;
END IF ;
#soft hyphen
IF INSTR(X , '­')
THEN SET TextString = REPLACE(TextString, '­','') ;
END IF ;
#registered trademark
IF INSTR(X , '®')
THEN SET TextString = REPLACE(TextString, '®','®') ;
END IF ;
#spacing macron
IF INSTR(X , '¯')
THEN SET TextString = REPLACE(TextString, '¯','¯') ;
END IF ;
#degree
IF INSTR(X , '°')
THEN SET TextString = REPLACE(TextString, '°','°') ;
END IF ;
#plus-or-minus
IF INSTR(X , '±')
THEN SET TextString = REPLACE(TextString, '±','±') ;
END IF ;
#superscript 2
IF INSTR(X , '²')
THEN SET TextString = REPLACE(TextString, '²','²') ;
END IF ;
#superscript 3
IF INSTR(X , '³')
THEN SET TextString = REPLACE(TextString, '³','³') ;
END IF ;
#spacing acute
IF INSTR(X , '´')
THEN SET TextString = REPLACE(TextString, '´','´') ;
END IF ;
#micro
IF INSTR(X , 'µ')
THEN SET TextString = REPLACE(TextString, 'µ','µ') ;
END IF ;
#paragraph
IF INSTR(X , '¶')
THEN SET TextString = REPLACE(TextString, '¶','¶') ;
END IF ;
#middle dot
IF INSTR(X , '·')
THEN SET TextString = REPLACE(TextString, '·','·') ;
END IF ;
#spacing cedilla
IF INSTR(X , '¸')
THEN SET TextString = REPLACE(TextString, '¸','¸') ;
END IF ;
#superscript 1
IF INSTR(X , '¹')
THEN SET TextString = REPLACE(TextString, '¹','¹') ;
END IF ;
#masculine ordinal indicator
IF INSTR(X , 'º')
THEN SET TextString = REPLACE(TextString, 'º','º') ;
END IF ;
#angle quotation mark (right)
IF INSTR(X , '»')
THEN SET TextString = REPLACE(TextString, '»','»') ;
END IF ;
#fraction 1/4
IF INSTR(X , '¼')
THEN SET TextString = REPLACE(TextString, '¼','¼') ;
END IF ;
#fraction 1/2
IF INSTR(X , '½')
THEN SET TextString = REPLACE(TextString, '½','½') ;
END IF ;
#fraction 3/4
IF INSTR(X , '¾')
THEN SET TextString = REPLACE(TextString, '¾','¾') ;
END IF ;
#inverted question mark
IF INSTR(X , '¿')
THEN SET TextString = REPLACE(TextString, '¿','¿') ;
END IF ;
#multiplication
IF INSTR(X , '×')
THEN SET TextString = REPLACE(TextString, '×','×') ;
END IF ;
#division
IF INSTR(X , '÷')
THEN SET TextString = REPLACE(TextString, '÷','÷') ;
END IF ;
#capital a, grave accent
IF INSTR(X , 'À')
THEN SET TextString = REPLACE(TextString, 'À','À') ;
END IF ;
#capital a, acute accent
IF INSTR(X , 'Á')
THEN SET TextString = REPLACE(TextString, 'Á','Á') ;
END IF ;
#capital a, circumflex accent
IF INSTR(X , 'Â')
THEN SET TextString = REPLACE(TextString, 'Â','Â') ;
END IF ;
#capital a, tilde
IF INSTR(X , 'Ã')
THEN SET TextString = REPLACE(TextString, 'Ã','Ã') ;
END IF ;
#capital a, umlaut mark
IF INSTR(X , 'Ä')
THEN SET TextString = REPLACE(TextString, 'Ä','Ä') ;
END IF ;
#capital a, ring
IF INSTR(X , 'Å')
THEN SET TextString = REPLACE(TextString, 'Å','Å') ;
END IF ;
#capital ae
IF INSTR(X , 'Æ')
THEN SET TextString = REPLACE(TextString, 'Æ','Æ') ;
END IF ;
#capital c, cedilla
IF INSTR(X , 'Ç')
THEN SET TextString = REPLACE(TextString, 'Ç','Ç') ;
END IF ;
#capital e, grave accent
IF INSTR(X , 'È')
THEN SET TextString = REPLACE(TextString, 'È','È') ;
END IF ;
#capital e, acute accent
IF INSTR(X , 'É')
THEN SET TextString = REPLACE(TextString, 'É','É') ;
END IF ;
#capital e, circumflex accent
IF INSTR(X , 'Ê')
THEN SET TextString = REPLACE(TextString, 'Ê','Ê') ;
END IF ;
#capital e, umlaut mark
IF INSTR(X , 'Ë')
THEN SET TextString = REPLACE(TextString, 'Ë','Ë') ;
END IF ;
#capital i, grave accent
IF INSTR(X , 'Ì')
THEN SET TextString = REPLACE(TextString, 'Ì','Ì') ;
END IF ;
#capital i, acute accent
IF INSTR(X , 'Í')
THEN SET TextString = REPLACE(TextString, 'Í','Í') ;
END IF ;
#capital i, circumflex accent
IF INSTR(X , 'Î')
THEN SET TextString = REPLACE(TextString, 'Î','Î') ;
END IF ;
#capital i, umlaut mark
IF INSTR(X , 'Ï')
THEN SET TextString = REPLACE(TextString, 'Ï','Ï') ;
END IF ;
#capital eth, Icelandic
IF INSTR(X , 'Ð')
THEN SET TextString = REPLACE(TextString, 'Ð','Ð') ;
END IF ;
#capital n, tilde
IF INSTR(X , 'Ñ')
THEN SET TextString = REPLACE(TextString, 'Ñ','Ñ') ;
END IF ;
#capital o, grave accent
IF INSTR(X , 'Ò')
THEN SET TextString = REPLACE(TextString, 'Ò','Ò') ;
END IF ;
#capital o, acute accent
IF INSTR(X , 'Ó')
THEN SET TextString = REPLACE(TextString, 'Ó','Ó') ;
END IF ;
#capital o, circumflex accent
IF INSTR(X , 'Ô')
THEN SET TextString = REPLACE(TextString, 'Ô','Ô') ;
END IF ;
#capital o, tilde
IF INSTR(X , 'Õ')
THEN SET TextString = REPLACE(TextString, 'Õ','Õ') ;
END IF ;
#capital o, umlaut mark
IF INSTR(X , 'Ö')
THEN SET TextString = REPLACE(TextString, 'Ö','Ö') ;
END IF ;
#capital o, slash
IF INSTR(X , 'Ø')
THEN SET TextString = REPLACE(TextString, 'Ø','Ø') ;
END IF ;
#capital u, grave accent
IF INSTR(X , 'Ù')
THEN SET TextString = REPLACE(TextString, 'Ù','Ù') ;
END IF ;
#capital u, acute accent
IF INSTR(X , 'Ú')
THEN SET TextString = REPLACE(TextString, 'Ú','Ú') ;
END IF ;
#capital u, circumflex accent
IF INSTR(X , 'Û')
THEN SET TextString = REPLACE(TextString, 'Û','Û') ;
END IF ;
#capital u, umlaut mark
IF INSTR(X , 'Ü')
THEN SET TextString = REPLACE(TextString, 'Ü','Ü') ;
END IF ;
#capital y, acute accent
IF INSTR(X , 'Ý')
THEN SET TextString = REPLACE(TextString, 'Ý','Ý') ;
END IF ;
#capital THORN, Icelandic
IF INSTR(X , 'Þ')
THEN SET TextString = REPLACE(TextString, 'Þ','Þ') ;
END IF ;
#small sharp s, German
IF INSTR(X , 'ß')
THEN SET TextString = REPLACE(TextString, 'ß','ß') ;
END IF ;
#small a, grave accent
IF INSTR(X , 'à')
THEN SET TextString = REPLACE(TextString, 'à','à') ;
END IF ;
#small a, acute accent
IF INSTR(X , 'á')
THEN SET TextString = REPLACE(TextString, 'á','á') ;
END IF ;
#small a, circumflex accent
IF INSTR(X , 'â')
THEN SET TextString = REPLACE(TextString, 'â','â') ;
END IF ;
#small a, tilde
IF INSTR(X , 'ã')
THEN SET TextString = REPLACE(TextString, 'ã','ã') ;
END IF ;
#small a, umlaut mark
IF INSTR(X , 'ä')
THEN SET TextString = REPLACE(TextString, 'ä','ä') ;
END IF ;
#small a, ring
IF INSTR(X , 'å')
THEN SET TextString = REPLACE(TextString, 'å','å') ;
END IF ;
#small ae
IF INSTR(X , 'æ')
THEN SET TextString = REPLACE(TextString, 'æ','æ') ;
END IF ;
#small c, cedilla
IF INSTR(X , 'ç')
THEN SET TextString = REPLACE(TextString, 'ç','ç') ;
END IF ;
#small e, grave accent
IF INSTR(X , 'è')
THEN SET TextString = REPLACE(TextString, 'è','è') ;
END IF ;
#small e, acute accent
IF INSTR(X , 'é')
THEN SET TextString = REPLACE(TextString, 'é','é') ;
END IF ;
#small e, circumflex accent
IF INSTR(X , 'ê')
THEN SET TextString = REPLACE(TextString, 'ê','ê') ;
END IF ;
#small e, umlaut mark
IF INSTR(X , 'ë')
THEN SET TextString = REPLACE(TextString, 'ë','ë') ;
END IF ;
#small i, grave accent
IF INSTR(X , 'ì')
THEN SET TextString = REPLACE(TextString, 'ì','ì') ;
END IF ;
#small i, acute accent
IF INSTR(X , 'í')
THEN SET TextString = REPLACE(TextString, 'í','í') ;
END IF ;
#small i, circumflex accent
IF INSTR(X , 'î')
THEN SET TextString = REPLACE(TextString, 'î','î') ;
END IF ;
#small i, umlaut mark
IF INSTR(X , 'ï')
THEN SET TextString = REPLACE(TextString, 'ï','ï') ;
END IF ;
#small eth, Icelandic
IF INSTR(X , 'ð')
THEN SET TextString = REPLACE(TextString, 'ð','ð') ;
END IF ;
#small n, tilde
IF INSTR(X , 'ñ')
THEN SET TextString = REPLACE(TextString, 'ñ','ñ') ;
END IF ;
#small o, grave accent
IF INSTR(X , 'ò')
THEN SET TextString = REPLACE(TextString, 'ò','ò') ;
END IF ;
#small o, acute accent
IF INSTR(X , 'ó')
THEN SET TextString = REPLACE(TextString, 'ó','ó') ;
END IF ;
#small o, circumflex accent
IF INSTR(X , 'ô')
THEN SET TextString = REPLACE(TextString, 'ô','ô') ;
END IF ;
#small o, tilde
IF INSTR(X , 'õ')
THEN SET TextString = REPLACE(TextString, 'õ','õ') ;
END IF ;
#small o, umlaut mark
IF INSTR(X , 'ö')
THEN SET TextString = REPLACE(TextString, 'ö','ö') ;
END IF ;
#small o, slash
IF INSTR(X , 'ø')
THEN SET TextString = REPLACE(TextString, 'ø','ø') ;
END IF ;
#small u, grave accent
IF INSTR(X , 'ù')
THEN SET TextString = REPLACE(TextString, 'ù','ù') ;
END IF ;
#small u, acute accent
IF INSTR(X , 'ú')
THEN SET TextString = REPLACE(TextString, 'ú','ú') ;
END IF ;
#small u, circumflex accent
IF INSTR(X , 'û')
THEN SET TextString = REPLACE(TextString, 'û','û') ;
END IF ;
#small u, umlaut mark
IF INSTR(X , 'ü')
THEN SET TextString = REPLACE(TextString, 'ü','ü') ;
END IF ;
#small y, acute accent
IF INSTR(X , 'ý')
THEN SET TextString = REPLACE(TextString, 'ý','ý') ;
END IF ;
#small thorn, Icelandic
IF INSTR(X , 'þ')
THEN SET TextString = REPLACE(TextString, 'þ','þ') ;
END IF ;
#small y, umlaut mark
IF INSTR(X , 'ÿ')
THEN SET TextString = REPLACE(TextString, 'ÿ','ÿ') ;
END IF ;
RETURN TextString ;
END$$
DELIMITER ;
y ejecutar a continuación consulta:
SELECT HTML_UnEncode('this is a <a>test, nothing more');
Estoy leyendo entradas producidas por un (¿con errores?) CKeditor, y también tuve que poner el reemplazo de ampersand en la primera posición, ** también afectando a X ** para que los caracteres como '" é "', que a veces se escapaban como '& agudo'; es decir '# ampersand' ' SI INSTR (X, '&') '' después fijar los TextString = REPLACE (TextString, '&', '&') ; '' set X = REPLACE (X, '&',' &') ; ' 'END IF;' Esto parece anormal comportamiento para mí, así que lo hice sólo se soluciona el error tipográfico producir error en su respuesta, pero no habría mucho sorprendió leer que no soy el único en ese caso la esperanza. esto ayuda. – Balmipour
también tuvo que añadir el apóstrofe. 'SUSTITUIR (TextString, ''', "'")' Esto no se añadió en mi Editar. (_y no estoy seguro de ediciones consecutivas son una buena práctica. es ¿Cómo lo considera la comunidad? _) – Balmipour
falta algo básico ™ como '', '' “, '' ” – billynoah
Si está utilizando php, this hilo debe ayudar a
Una función en SQL:
Está bien si necesita soporte MUY básico, pero el método que esa persona usó es * extremadamente * manual y sin duda hay una manera más dinámica. – John
La siguiente función se puede utilizar para decodificar entidades numéricas como & # 12345;
CREATE FUNCTION entity_decode(txt TEXT CHARSET utf8) RETURNS TEXT CHARSET utf8
NO SQL
DETERMINISTIC
BEGIN
DECLARE tmp TEXT CHARSET utf8 DEFAULT txt;
DECLARE entity TEXT CHARSET utf8;
DECLARE pos1 INT DEFAULT 1;
DECLARE pos2 INT;
DECLARE codepoint INT;
IF txt IS NULL THEN
RETURN NULL;
END IF;
LOOP
SET pos1 = LOCATE('&#', tmp, pos1);
IF pos1 = 0 THEN
RETURN tmp;
END IF;
SET pos2 = LOCATE(';', tmp, pos1 + 2);
IF pos2 > pos1 THEN
SET entity = SUBSTRING(tmp, pos1, pos2 - pos1 + 1);
IF entity REGEXP '^&#[[:digit:]]+;$' THEN
SET codepoint = CAST(SUBSTRING(entity, 3, pos2 - pos1 - 2) AS UNSIGNED);
IF codepoint > 31 THEN
SET tmp = CONCAT(LEFT(tmp, pos1 - 1), CHAR(codepoint USING utf32), SUBSTRING(tmp, pos2 + 1));
END IF;
END IF;
END IF;
SET pos1 = pos1 + 1;
END LOOP;
END
Esto añade soporte para codificación hexadecimal valores numéricos (que yo recibo de Perl usando "el uso de HTML :: Entidades qw (encode_entities_numeric);". En cuanto a error en la línea seis, llegué que cuando me encontré en una viuda consulta en MySQL Workbench, pero cuando lo pongo en el diálogo crear función, que funcionaba bien.
CREATE FUNCTION entity_decode(txt TEXT CHARSET utf8) RETURNS TEXT CHARSET utf8
NO SQL
DETERMINISTIC
BEGIN
DECLARE tmp TEXT CHARSET utf8 DEFAULT txt;
DECLARE entity TEXT CHARSET utf8;
DECLARE pos1 INT DEFAULT 1;
DECLARE pos2 INT;
DECLARE codepoint INT;
IF txt IS NULL THEN
RETURN NULL;
END IF;
LOOP
SET pos1 = LOCATE('&#', tmp, pos1);
IF pos1 = 0 THEN
RETURN tmp;
END IF;
SET pos2 = LOCATE(';', tmp, pos1 + 2);
IF pos2 > pos1 THEN
SET entity = SUBSTRING(tmp, pos1, pos2 - pos1 + 1);
IF entity REGEXP '^&#[[:digit:]]+;$' THEN
SET codepoint = CAST(SUBSTRING(entity, 3, pos2 - pos1 - 2) AS UNSIGNED);
IF codepoint > 31 THEN
SET tmp = CONCAT(LEFT(tmp, pos1 - 1), CHAR(codepoint USING utf32), SUBSTRING(tmp, pos2 + 1));
END IF;
END IF;
IF entity REGEXP '^&#x[[:digit:]]+;$' THEN
SET codepoint = CAST(CONV(SUBSTRING(entity, 4, pos2 - pos1 - 3), 16, 10) AS UNSIGNED);
IF codepoint > 31 THEN
SET tmp = CONCAT(LEFT(tmp, pos1 - 1), CHAR(codepoint USING utf32), SUBSTRING(tmp, pos2 + 1));
END IF;
END IF;
END IF;
SET pos1 = pos1 + 1;
END LOOP;
FIN
- 1. Decodificar entidades HTML en android
- 2. ¿Cómo puedo decodificar entidades HTML?
- 3. Cómo decodificar entidades HTML numéricas en PHP
- 4. Cómo decodificar entidades HTML en C?
- 5. ¿Cómo puedo decodificar entidades HTML en C++?
- 6. PHP: decodificación de entidades HTML
- 7. ¿Cómo puedo decodificar caracteres HTML en C#?
- 8. Conversión de entidades HTML con nombre a entidades HTML numéricas
- 9. Decodificación de entidades HTML con Python
- 10. MySQL Comodín para "=" - ¿hay una
- 11. ¿Hay alguna funcionalidad en/para Delphi que convierta una cadena con entidades nombradas y numeradas html en texto unicode?
- 12. obteniendo json_encode para no escapar entidades html
- 13. Entidades HTML con Knockout
- 14. Java: ¿cómo deshacer las entidades de caracteres HTML en Java?
- 15. Función almacenada mySQL para crear una babosa
- 16. Función C# para devolver objetos/entidades genéricos
- 17. Cómo decodificar la entidad HTML con manubrios
- 18. función mysql para devolver una tabla
- 19. Java: convierta entidades html con nombre en entidades xml numeradas
- 20. Conversión de fracciones en entidades html
- 21. Entidades UTF-8 y HTML
- 22. Usando python para editar html, pero lxml convierte lindas entidades html en una extraña codificación
- 23. ¿Hay una representación estándar para formularios HTML?
- 24. usar entidades HTML en una forma Zend Seleccionar
- 25. Desapareciendo entidades de dingbat HTML
- 26. Decodificación de todas las entidades HTML
- 27. Eliminar entidades html de una base de datos
- 28. Convertir etiquetas en entidades html
- 29. cómo escapar entidades html en la cuadrícula?
- 30. ¿Cómo evitar que DOMXPath expanda entidades HTML?
El hecho de que pregunte esto implica que usted tiene un error en el diseño de su aplicación. El motor de DB no debería preocuparse por esto, y cambiar la aplicación para que no necesite dicha función es lo correcto. – Tomalak
@Tomalak eso es simplemente ridículo. Que no puedas pensar en un escenario donde uno pueda necesitarlo no significa que no exista. El OP no ha especificado para qué lo está usando, por lo que no puede suponer que está haciendo algo mal. – matteo
@matteo Ni siquiera dije que no podía pensar en semejante escenario. Dije que las cosas están mal cuando te encuentras en ese escenario. Es la situación proverbial de "cuando en un agujero, dejen de cavar". Ese algo - * de alguna manera * - podría ser técnicamente posible no es en absoluto una buena razón para hacerlo. En lugar de reforzar un enfoque nefasto, mi consejo fue que me sentara y obtuviera algo de perspectiva. – Tomalak