我目前正在尝试对输入表单进行编码,您可以在其中键入和格式化文本以供以后用作XML条目。为了使HTML代码具有XML可读性,我必须用相应的符号代码替换代码括号,即<
<
和>
>
。< / p>
格式化的文本作为HTML代码传输,带有变量 inputtext ,因此我们有文本
The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.
需要转换为
The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.
我用.replace()函数尝试了它:
inputxml = inputxml.replace("<", "<");
inputxml = inputxml.replace(">", ">");
但这只会取代第一次出现的括号。我很确定我需要某种循环;我也尝试过使用jQuery中的each()
函数(一位朋友推荐我查看了jQuery包),但我仍然是编码的新手,我也很难解决这个问题。
如何编写一个循环来代替变量中的代码括号,如上所述?
其他信息
当然,你应该假设这是更大的一部分。我是日本研究的研究生,目前,我正试图以更容易理解的方式可视化有关日本历史的信息。为此,我使用麻省理工学院研究生开发的Simile Timeline API。您可以在my homepage上看到时间轴的工作测试。
Simile Timeline使用基于AJAX和Javascript的API。如果您不想在自己的服务器上安装AJAX引擎,可以从MIT实现时间轴API。时间轴的数据通常由一个或多个XML文件或JSON文件提供。在我的例子中,我使用XML文件;您可以查看this example中的XML结构。
在时间轴内,您可以点击所谓的“事件”,以便在信息气泡弹出窗口中显示其他信息。这些信息气泡中的文本源自XML源文件。现在,如果要在信息气泡中进行一些HTML格式化,则不能使用代码括号,因为它们只会显示为纯文本。但是,如果使用符号代码而不是普通括号,它就可以工作。
时间表的内容绝对是由人写的,完全不习惯于编纂标记,即历史学家,艺术史学家,社会学家,其中有几个50岁及以上的人。我试图向他们解释如果他们想要创建一个时间轴他们如何格式化XML文件,但是当时间线没有加载因为他们忘记关闭括号或包含撇号时,他们偶尔会滑倒并感到沮丧。
为了更容易,我尝试制作一个易于使用的输入表单,您可以输入所有信息并格式化文本WYSIWYG样式,然后将其转换为您只需要复制的XML代码,粘贴到XML源文件中。其中大部分都有效,但我仍在努力转换主文本字段中的文本标记。
将代码括号转换为符号代码是我需要工作的最后一件事,以便有一个有效的输入表单。
答案 0 :(得分:22)
看这里:
http://www.bradino.com/javascript/string-replace/
只需使用此正则表达式替换所有:
str = str.replace(/\</g,"<") //for <
str = str.replace(/\>/g,">") //for >
答案 1 :(得分:7)
要在XML中存储任意字符串,请使用浏览器的本机XML功能。通过这种方式,它将变得更加简单,而且您将永远不必再考虑边缘情况(例如,包含引号或尖括号的属性值)。
使用XML时需要考虑的提示:如果有任何方法可以避免,则永远不要通过串联从字符串构建XML 。你会让自己陷入困境。有处理XML的API,使用它们。
从您的代码中,我建议如下:
$(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
}
答案 2 :(得分:2)
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace
您可以使用带有“g”(全局匹配)标志的正则表达式。
var entities = {'<': '<', '>': '>'};
'<inputtext><anotherinputext>'.replace(
/[<>]/g, function (s) {
return entities[s];
}
);
答案 3 :(得分:1)
您还可以使用以下内容包围XML条目:
<![CDATA[...]]>
参见示例:
<xml>
<tag><![CDATA[The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.]]></tag>
</xml>
答案 4 :(得分:0)
正如评论中所提到的,您真正需要的是对字符串进行XML编码。如果您绝对想要这样做是Javascript,请查看PHP.js函数htmlentities。
答案 5 :(得分:0)
我创建了一个简单的JS函数来替换大于和小于字符
这是一个脏字符串示例: << / strong> noreply@email.com >
这是一个示例字符串: [noreply@email.com]
function RemoveGLthanChar(notes) {
var regex = /<[^>](.*?)>/g;
var strBlocks = notes.match(regex);
strBlocks.forEach(function (dirtyBlock) {
let cleanBlock = dirtyBlock.replace("<", "[").replace(">", "]");
notes = notes.replace(dirtyBlock, cleanBlock);
});
return notes;
}
使用
调用$('#form1').submit(function (e) {
e.preventDefault();
var dirtyBlock = $("#comments").val();
var cleanedBlock = RemoveGLthanChar(dirtyBlock);
$("#comments").val(cleanedBlock);
this.submit();
});