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 Tintincontienen 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)