2013-07-09 3 views
0

Я пытаюсь добавить все точки с запятой в строку с символом HTML  , который является неразрывным тонким пространством.JavaScript string.replace: inserting text как HTML

Чтобы сделать это, я написал эту строку:

str = str.replace(/;/g, " ;"); 

К сожалению, тонкий пробел записывается непосредственно, а не его HTML представления.

Есть ли флаг, настройка или даже другая функция, которая позволит мне вставить этот символ в HTML?

спасибо.

Редактировать: Возможно, следовало бы упомянуть об этом раньше: Я работаю над базовым конвертером псевдокода в HTML, в котором некоторые символы исходной строки заменяются стандартными эквивалентами HTML.

Полученная строка затем выводится в элемент div, где я могу проверить его, чтобы убедиться, что он выглядит хорошо. Затем я извлекаю источник этого нового текста для размещения на другой веб-странице.

Но когда я смотрю на источник для тонкого пространства, это просто сам символ, а не имя сущности.

(я бы вставить полный исходный код для преобразования, но это более 300 строк.)

Edit 2: Я был под впечатлением, что Ctrl + U в Firefox будет показывать вновь добавленные символы. Виноват; они появляются только при просмотре источника с помощью Firebug (или его эквивалента Webkit) или выборе текста, щелкнув правой кнопкой мыши и просматривая исходный код для выбора (опция, доступная только в FF, похоже).

Чтобы проверить последний подход, я создал два Div элементов и использовал этот JavaScript код:

document.getElementById("div1").innerHTML = ("'&'"); 
document.getElementById("div2").innerHTML = ("' '"); 

Амперсанд отображаются как &, но имя сущности в узком пространстве является не используются. Это может быть просто странным поведением этой специфической функции FF.

+3

Что действительно важно, так это то, что вы делаете со строкой * после того, как вы сделали эту замену. Вы должны опубликовать эту часть своего кода. – Pointy

+1

Почему символ должен быть в форме сущности? Кроме того, вы попробовали замену на '" & # 8239 ;; "'? Я думаю, что это может решить вашу проблему, так как '&' будет превращен в '&'. – MathSquared

+0

Я не понимаю ... вам нужны символы тонкого пробела, вы хотите, чтобы персонажи составляли объект HTML для тонкого пространства? –

ответ

0

Почему у вас есть вторая точка с запятой в вашей замене? Разве это не должно быть просто:

str = str.replace(/;/g, " "); 

На моем клиенте «ул» содержит HTML-объекты, но как только вы подключите его к DOM, то сущности превращаются в нативные символы. Я думаю, это зависит от того, для чего вы его используете. Если вы используете 'str' как innerText элемента, вы увидите объекты, а не пробел. например

(function(s) { var x=document.createElement('div'); x.innerText=s; document.body.appendChild(x); })(str); 
+1

Я считаю, что вторая точка с запятой связана с тем, что он все еще хочет точку с запятой в конце строки. Первая точка с запятой заканчивается строкой представления HTML; вторая точка с запятой. –

+0

nevermind Я перечитываю ваше сообщение о том, почему у вас двойной ;; –

0

"& # 8239;" является html-сущностью и поэтому не понимается javascript. Я рекомендую использовать метод String.fromCharCode(). Пример будет следующим:

var str = 'test;here';

str = str.replace(/;/g, String.fromCharCode(8239));

alert(str);

Вы можете узнать больше о методе fromCharCode here.

+0

Это интересно. Поскольку параметр указывает значение Unicode, является ли функция независимой от кодирования? Основная причина, по которой я хочу, чтобы JS вставлял номер сущности, должен убедиться, что мне не нужно беспокоиться о вопросительных знаках, если кодировка неверна, но в документации Mozilla это не рассматривается. – Julien

+0

Функция вернет строку, используя кодировку по умолчанию, которая становится немного сложной с javascript, так как нет истинного правильного ответа. Ссылка ниже - лучшее, что я нашел, пытаясь объяснить внутреннюю кодировку javascript. Я не эксперт по этой теме, поэтому, надеюсь, это поможет хотя бы указать вам в правильном направлении. http://mathiasbynens.be/notes/javascript-encoding –

1

Если вы буквально хотите символов  , амперсанд должен быть закодирован как таковой.

str = str.replace(/;/g, " ;"); 
Смежные вопросы