Подтвердить что ты не робот

Замените все строки "<" и ">" в ​​переменной с "&lt;" и "&gt;"

В настоящее время я пытаюсь закодировать форму ввода, в которой вы можете вводить и форматировать текст для последующего использования в качестве записей XML. Чтобы сделать HTML-код XML-читаемым, мне нужно заменить скобки кода соответствующими кодами символов, то есть < с &lt; и > на &gt;.

Отформатированный текст передается как HTML-код с переменным входным текстом, поэтому мы имеем, например, текст

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;");

Но это просто заменит первое вхождение скобок. Я почти уверен, что мне нужен какой-то цикл для этого; Я также попытался использовать функцию each() из jQuery (рекомендованный мной я посмотрел на пакет jQuery), но я все еще новичок в кодировании в целом, и у меня возникают проблемы с его работой.

Как бы вы закодировали цикл, который заменил бы скобки кода внутри переменной, как описано выше?

Дополнительная информация

Вы, конечно, правы в предположении, что это часть чего-то большего. Я аспирант в области японских исследований и в настоящее время, я пытаюсь представить информацию о истории в Японии более доступным способом. Для этого я использую API-интерфейс Simile Timeline, разработанный студентами MIT grad. Вы можете увидеть рабочий тест временной шкалы на моей домашней странице.

В Simile Timeline используется API на основе AJAX и Javascript. Если вы не хотите устанавливать AJAX-движок на свой собственный сервер, вы можете реализовать API временной шкалы из MIT. Данные для временной шкалы обычно предоставляются либо одним или несколькими файлами XML, либо файлами JSON. В моем случае я использую файлы XML; вы можете взглянуть на структуру XML в этом примере.

В рамках временной шкалы есть так называемые "события", на которые вы можете щелкнуть, чтобы открыть дополнительную информацию в всплывающем окне информационного пузыря. Текст в этих информационных пузырях происходит из исходного файла XML. Теперь, если вы хотите сделать HTML-форматирование в информационных пузырях, вы не можете использовать скобки для кода, потому что они будут отображаться просто как обычный текст. Однако он работает, если вы используете коды символов вместо простых скобок.

Содержание для временной шкалы будет составлено людьми, абсолютно и совершенно не привыкшими к кодифицированной разметке, то есть историками, искусствоведами, социологами, среди которых несколько человек в возрасте 50 лет и старше. Я попытался объяснить им, как они должны форматировать XML файл, если они хотят создать временную шкалу, но они иногда выскальзывают и расстраиваются, когда временная шкала не загружается, потому что они забыли закрыть скобку или включить апостроф,

Чтобы упростить работу, я попытался создать простую в использовании форму ввода, в которой вы можете ввести всю информацию и форматировать текст WYSIWYG-стиля, а затем преобразовать его в XML-код, который вам просто нужно скопировать и вставьте в исходный файл XML. Большинство из них работает, хотя я все еще борется с преобразованием текстовой разметки в основное текстовое поле.

Преобразование кодовых скобок в код символа - последнее, что мне нужно для работы, чтобы иметь рабочую форму ввода.

4b9b3361

Ответ 1

Чтобы сохранить произвольную строку в XML, используйте собственные возможности XML-браузера. Это будет намного проще, и вам больше никогда не придется думать о крайних случаях (например, значения атрибутов, содержащие кавычки или заостренные скобки).

Совет, который следует учитывать при работе с XML: Никогда не создавайте XML из строк путем конкатенации, если есть способ избежать этого.. Вы попадете в неприятности таким образом. Существуют API для обработки XML, их использования.

Исходя из вашего кода, я бы предложил следующее:

$(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

смотрите здесь:

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

просто используйте это регулярное выражение для замены всех:

str = str.replace(/\</g,"&lt;")   //for <
str = str.replace(/\>/g,"&gt;")   //for >

Ответ 4

Вы также можете объединить ваши записи 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

Ответ 5

Что вам действительно нужно, как упоминалось в комментариях, является XML-кодирование строки. Если вы абсолютно хотите это сделать, это Javascript, посмотрите на функцию PHP.js htmlentities.