ejemplo - textarea no resizable html
Cómo evitar que un HTML TEXTAREA decodifique entidades html (6)
Debes estar seguro de que esto se representa en el navegador:
<textarea name="somename">&lt;div</textarea>
Esencialmente, esto significa que el &
in <
tiene que ser html codificado a &
. Cómo hacerlo dependerá de las tecnologías que estés usando.
ACTUALIZACIÓN : Piénsalo así. Si desea mostrar <div>
dentro de un área de texto, deberá codificar <>
porque, de lo contrario, <div>
sería un elemento HTML normal para el navegador:
<textarea name="somename"><div></textarea>
Dicho esto, si desea mostrar <div>
dentro de un área de texto, tendrás que codificar &
nuevamente, porque el navegador decodifica las entidades HTML al renderizar HTML. No tiene nada que ver con tu base de datos.
Tengo un problema extraño:
En la base de datos, tengo un signo ampersand literal punto y coma:
<div
cada vez que se imprime en una etiqueta html textarea, el código fuente de la página muestra el >
como >
.
¿Cómo paro esta decodificación?
En PHP, esto se puede hacer usando htmlentities (). Ejemplo a continuación.
<?php
$content = "This string contains the TM symbol: ™";
print "<textarea>". htmlentities($content) ."</textarea>";
?>
Sin htmlentities (), el área de texto interpretaría y mostraría el símbolo TM (™) en lugar de "& trade;".
Encontré una solución alternativa para leer y trabajar con el navegador, simplemente lea el texto del elemento () usando jQuery, devuelve los caracteres como caracteres de visualización y me permite escribir desde un área de texto al interior de HTML de una división usando la propiedad a través de html () ...
No puede evitar que las entidades se decodifiquen en un área de texto [1] ya que el contenido de un área de texto no es (a diferencia de un script o elemento de estilo) CDATA intrínseco, aunque la recuperación de errores a veces puede dar la impresión de que lo es.
La definición del elemento textarea es:
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
es decir, contiene PCDATA que se describe como :
Texto del documento (indicado por la construcción SGML "#PCDATA"). El texto puede contener referencias de caracteres. Recuerde que estos comienzan con
&
y terminan con un punto y coma (p. Ej.,Hergé''s adventures of Tintin
contienen la referencia de entidad de carácter para el carácter agudo ).
Esto significa que cuando escribe (el HTML no válido de) "inicio de etiqueta" ( <
) el navegador lo corrige a "menos de signo" ( <
) pero cuando escribe "inicio de entidad" ( &
), que está permitido , no se realiza corrección de errores.
Necesitas escribir lo que quieres decir. Si desea incluir algún HTML como datos, debe convertir cualquier carácter con un significado especial a su respectiva referencia de caracteres.
Si los datos son:
<div
Entonces el HTML debe ser:
<textarea>&lt;div</textarea>
Puede usar las funciones estándar para convertir esto (por ejemplo, htmlspecialchars
de PHP o el módulo HTML :: Entities de Perl).
NB 1: Si estaba usando XHTML [2] (y realmente lo estaba usando, no cuenta si lo sirve como texto / html ), entonces podría usar un bloque CDATA explícito:
<textarea><![CDATA[<div]]></textarea>
NB 2: O si los navegadores implementaron HTML 4 correctamente
Ok, pero la pregunta es. ¿Por qué los decodifica de todos modos? Suponiendo que haya agregado &, guardar el área de texto, se guardará & lt; , pero mostrado como <, guardándolo de nuevo lo convertirá de nuevo a <(pero permanecerá <en la base de datos), guardándolo de nuevo lo guardará a <en la base de datos, ¿por qué el área de texto lo decodifica?
- El servidor envía (al navegador) los datos codificados como HTML .
- El navegador envía (al servidor) los datos codificados como application / x-www-form-urlencoded (o multipart / form-data).
Como el navegador no envía los datos como HTML, los caracteres no se representan como entidades HTML.
Si toma los datos recibidos del cliente y luego los coloca en un documento HTML, primero debe codificarlos como HTML.
Puede servir su contenido de base de datos desde una página separada y luego colocarlo en el área de texto usando una llamada Ajax de Javascript (jQuery):
request = $.ajax
({
type: "GET",
url: "url-with-the-troubled-content.php",
success: function(data)
{
document.getElementById(''id-of-text-area'').value = data;
}
});
Explicado en
http://www.endtask.net/how-to-prevent-a-textarea-element-from-decoding-html-entities/
Tuve el mismo problema y acabo de hacer dos reemplazos en el texto para mostrar desde la base de datos antes de dejarlo en el área de texto:
myString = Replace(myString, "&", "&")
myString = Replace(myString, "<", "<")
Reemplace n: o 1 para engañar al área de texto para que muestre los códigos. reemplace n: o 2: sin este reemplazo no puede mostrar la palabra "" dentro del área de texto (terminaría la etiqueta de área de texto).
(El código Asp / vbscript anterior, se traduce a un método de reemplazo de su elección de idioma)