Code WTF: JavaScript HTML entities

Рубрика: JavaScript/Ajax, Юмор | 2 July 2009, 10:49 | Vadim Voituk

Извините за “неформат” для данного блога, но не смог удержаться.
Вот так вот мой “юннат” реализует замену html-entities на JavaScript:


function properHtmlFromText(text){
	while (text.search(/\</) != -1)
		text = text.replace(/\</, '&lt;');
	while (text.search(/\&/) != -1)
		text = text.replace(/\&/, '&amp;');
	while (text.search(/\r/) != -1)
		text = text.replace(/\r/, '');
	while (text.search(/\n/) != -1)
		text = text.replace(/\n/, '<br />');
	return text;
}

Как увидел – плакал…
Наверное все-таки будем возобновлять ежедневные code-review…

P.S. В комментариях предлагаю поделиться “правильным” решением :)

Комментариев: 17

17 Responses to “Code WTF: JavaScript HTML entities”

Комментарии:

  1. NARKOZ

    Думаю, так будет проще:

    function properHtmlFromText(text) {
      var ta=document.createElement("textarea"); //допустим
      ta.innerHTML=text.replace(/</g,"<").replace(/&/g,"&").replace(/r/g,"").replace(/n/g,"");
      return ta.value;
    }
  2. Vadim Voituk

    Это типа шутка такая? Зачем содавать обьект textarea?

  3. NARKOZ

    Извиняюсь, не досмотрел. И, вправду, незачем так извращаться. Нужно:

    function properHtmlFromText(text){
    
    var pattern1 = /\</;
    var pattern2 = /\&/;
    var pattern3 = /\r/;
    var pattern4 = /\n/;
    
      while (pattern1.test(text))
        text = text.replace(pattern1, '<');
      while (pattern2.test(text))
        text = text.replace(pattern, '&');
      while (pattern3.test(text))
        text = text.replace(pattern3, '');
      while (pattern4.test(text))
        text = text.replace(pattern4, '');
    
      return text;
    }
  4. crypto5

    ‘<supatag/>&<supatag/>&’.replace(/&/g,’&’).replace(/>/g,’>’).replace(/</g,’<’).replace(/”/g,’"’);

    Сразу предупреждаю, я совсем совсем сервер сайд программист ;-)

  5. Vadim Voituk

    Угу, именно так :)

  6. crypto5

    Походу все равно парсер коментов эскейп символы разэскейпчивает..

  7. crypto5

    Попробуэм напистаь программу которая выводит себя сама. Итак новая попыткса справится с редактором коментариев:

    ‘<supatag/>&<supatag/>&’.replace(/&/g,’&’).replace(/>/g,’>’).replace(/</g,’<’).replace(/"/g,’"’);

  8. crypto5

    Рвение к совершенству не дает отступить на пол пути:

    <supatag/>&<supatag/>&’.replace(/&/g,’&amp;’).replace(/>/g,’&gt;’).replace(/</g,’&lt;’).replace(/"/g,’&quot;’);

  9. Juriy

    Юннат говоришь, я вот код битрикса читаю и плачу.

    do{ //one iteration loop

    тут полтыщи строк кода

    }while (false);

  10. Vadim Voituk

    Juriy
    А чем сакральный смысл такого? Остатки от рефакторингов?

    Вот что еще паз подтверждает что битрикс такие же юннаты пишут. :)
    Продают, правда, совсем не юннаты.

  11. panshdw

    OT: а що з RSS? останній пост про Groovy :(

  12. Vadim Voituk

    @panshdw
    Спасибо – пофиксил.

  13. dimat

    Я тоже встречал do {} while (false); в коде одного нашего индуса. Он говорит что всегда так пишет. А использует для того, что бы можно было break’ом выйти из этого блока.

  14. Juriy

    Я, в действительности, тоже так подумал, что эта конструкция нужна только для break’a.

  15. CTAPbIu_MABP

    мой ответ
    http://mabp.kiev.ua/2009/07/06/code-wtf-javascript-html-entities/

    решил с парсером не воевать как crypto5

  16. fatboy

    В условии есть проверка на открытие тега, а где на закрытие?

  17. CTAPbIu_MABP

    ну это же “юннат” писал он обычно теги не закрывает :D

Leave a Reply