occurrences - replace javascript all
Reemplace todas las cadenas "<" y ">" en una variable con "& lt;" y "& gt;" (5)
Lo que realmente necesita, como se menciona en los comentarios, es codificar XML la cadena. Si quieres hacer esto absolutamente es Javascript, eche un vistazo a la función PHP.js htmlentities .
Actualmente estoy intentando codificar un formulario de entrada donde puede escribir y formatear un texto para usarlo posteriormente como entradas XML. Para hacer que el código HTML sea legible por XML, tengo que reemplazar los corchetes del código con los códigos de símbolos correspondientes, es decir, <
con <
y >
con >
.
El texto formateado se transfiere como código HTML con el texto de entrada variable, por lo que tenemos, por ejemplo, el texto
The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.
que necesita convertirse en
The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.
Lo intenté con la función .replace ():
inputxml = inputxml.replace("<", "<");
inputxml = inputxml.replace(">", ">");
Pero esto simplemente reemplazaría la primera aparición de los corchetes. Estoy bastante seguro de que necesito algún tipo de ciclo para esto; También traté de usar la función each()
de jQuery (un amigo me recomendó que mirara el paquete jQuery), pero todavía soy nuevo en la codificación en general y tengo problemas para hacer que esto funcione.
¿Cómo codificaría un ciclo que reemplazaría los corchetes del código dentro de una variable como se describe arriba?
Información Adicional
Estás, por supuesto, en la suposición de que esto es parte de algo más grande. Soy un estudiante graduado en estudios japoneses y actualmente, estoy tratando de visualizar información sobre la historia de Japenese de una manera más accesible. Para esto, estoy usando la API de Simile Timeline desarrollada por estudiantes de postgrado de MIT. Puede ver una prueba de trabajo de una línea de tiempo en mi página de inicio .
Simile Timeline usa una API basada en AJAX y Javascript. Si no desea instalar el motor AJAX en su propio servidor, puede implementar la API de línea de tiempo desde el MIT. Los datos para la línea de tiempo usualmente son proporcionados por uno o varios archivos XML o archivos JSON. En mi caso, uso archivos XML; Puedes echar un vistazo a la estructura XML en este ejemplo .
Dentro de la línea de tiempo, existen los llamados "eventos" en los que puede hacer clic para revelar información adicional dentro de una ventana emergente de burbujas de información. El texto dentro de esas burbujas de información se origina en el archivo fuente XML. Ahora, si quiere hacer algo de formato HTML dentro de las burbujas de información, no puede usar el corchete del código porque esas solo se mostrarán como texto sin formato. Sin embargo, funciona si usa los códigos de símbolo en lugar de los corchetes.
El contenido para la línea de tiempo será escrito por personas absolutamente y totalmente no acostumbradas al marcado codificado, es decir, historiadores, historiadores del arte, sociólogos, entre ellos varias personas mayores de 50 años. Intenté explicarles cómo tienen que formatear el archivo XML si quieren crear una línea de tiempo, pero ocasionalmente pierden y frustran cuando la línea de tiempo no se carga porque olvidaron cerrar un paréntesis o incluir un apóstrofo .
Para hacerlo más fácil, intenté crear un formulario de entrada fácil de usar en el que pueda ingresar toda la información y formatear el texto con el estilo WYSIWYG y luego convertirlo en código XML, que solo tiene que copiar y pegar en el Archivo fuente XML La mayoría funciona, aunque todavía estoy luchando con la conversión del texto marcado en el campo de texto principal.
La conversión de los corchetes de código en código de símbolo es lo último que necesitaba para trabajar a fin de tener un formulario de entrada de trabajo.
Para almacenar una cadena arbitraria en XML, use las capacidades XML nativas del navegador. Será mucho más simple de esa manera, además de que nunca más tendrás que pensar en los casos límite (por ejemplo, valores de atributo que contengan comillas o corchetes puntiagudos).
Un consejo para pensar cuando trabaje con XML: nunca construya XML a partir de cadenas por concatenación si hay alguna forma de evitarlo . Te meterás en problemas de esa manera. Hay API para manejar XML, úsalos.
Yendo desde su código, sugeriría lo siguiente:
$(function() {
$("#addbutton").click(function() {
var eventXml = XmlCreate("<event/>");
var $event = $(eventXml);
$event.attr("title", $("#titlefield").val());
$event.attr("start", [$("#bmonth").val(), $("#bday").val(), $("#byear").val()].join(" "));
if (parseInt($("#eyear").val()) > 0) {
$event.attr("end", [$("#emonth").val(), $("#eday").val(), $("#eyear").val()].join(" "));
$event.attr("isDuration", "true");
} else {
$event.attr("isDuration", "false");
}
$event.text( tinyMCE.activeEditor.getContent() );
$("#outputtext").val( XmlSerialize(eventXml) );
});
});
// helper function to create an XML DOM Document
function XmlCreate(xmlString) {
var x;
if (typeof DOMParser === "function") {
var p = new DOMParser();
x = p.parseFromString(xmlString,"text/xml");
} else {
x = new ActiveXObject("Microsoft.XMLDOM");
x.async = false;
x.loadXML(xmlString);
}
return x.documentElement;
}
// helper function to turn an XML DOM Document into a string
function XmlSerialize(xml) {
var s;
if (typeof XMLSerializer === "function") {
var x = new XMLSerializer();
s = x.serializeToString(xml);
} else {
s = xml.xml;
}
return s
}
También podría rodear sus entradas XML con lo siguiente:
<![CDATA[...]]>
Ver ejemplo:
<xml>
<tag><![CDATA[The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.]]></tag>
</xml>
Artículo de Wikipedia: http://en.wikipedia.org/wiki/CDATA
mira aquí:
http://www.bradino.com/javascript/string-replace/
solo usa esta expresión regular para reemplazar todo:
str = str.replace(//</g,"<") //for <
str = str.replace(//>/g,">") //for >
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace
Puede usar una expresión regular con el indicador "g" (concordancia global).
var entities = {''<'': ''<'', ''>'': ''>''};
''<inputtext><anotherinputext>''.replace(
/[<>]/g, function (s) {
return entities[s];
}
);