替换所有字符串"<"和">"在"<"的变量中和">"

时间:2011-05-23 07:12:06

标签: javascript jquery string loops replace

我目前正在尝试对输入表单进行编码,您可以在其中键入和格式化文本以供以后用作XML条目。为了使HTML代码具有XML可读性,我必须用相应的符号代码替换代码括号,即< &lt;> &gt;。< / p>

格式化的文本作为HTML代码传输,带有变量 inputtext ,因此我们有文本

The <b>Genji</b> and the <b>Heike</b> waged a long and bloody war.

需要转换为

The &lt;b&gt;Genji&lt;/b&gt; and the &lt;b&gt;Heike&lt;/b&gt; waged a long and bloody war.

我用.replace()函数尝试了它:

inputxml = inputxml.replace("<", "&lt;");       
inputxml = inputxml.replace(">", "&gt;");

但这只会取代第一次出现的括号。我很确定我需要某种循环;我也尝试过使用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源文件中。其中大部分都有效,但我仍在努力转换主文本字段中的文本标记。

将代码括号转换为符号代码是我需要工作的最后一件事,以便有一个有效的输入表单。

6 个答案:

答案 0 :(得分:22)

看这里:

http://www.bradino.com/javascript/string-replace/

只需使用此正则表达式替换所有:

str = str.replace(/\</g,"&lt;")   //for <
str = str.replace(/\>/g,"&gt;")   //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 = {'<': '&lt;', '>': '&gt;'};

'<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>

维基百科文章: http://en.wikipedia.org/wiki/CDATA

答案 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();
});