Преобразование специальных символов в HTML в Javascript

121

Кто-нибудь знает, как преобразовать специальные символы HTMLв Javascript?

Пример:

  • &(амперсанд) становится &amp.
  • "(двойная кавычка) становится, &quotесли ENT_NOQUOTESне установлено.
  • '(одинарная кавычка) становится &#039только тогда, когда ENT_QUOTESустановлена.
  • <(меньше чем) становится &lt.
  • >(больше чем) становится &gt.
Джин Ён
источник
см. также: stackoverflow.com/questions/1354064
Крис
Вы можете использовать эту библиотеку: npmjs.com/package/utf8
Камило Ортегон,

Ответы:

77

Вам нужна функция, которая делает что-то вроде

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

Но с учетом вашего желания разной обработки одинарных / двойных кавычек.

Стивен
источник
что делает косая черта g?
JohnnyBizzle
5
@JohnnyBizzle /gв регулярном выражении означает «глобальный». Проще говоря, все вхождения строки будут заменены. Без /gединого первого матча заменили бы.
Кевин Гимбел
208

На мой взгляд, лучший способ - использовать встроенную в браузер функцию escape-последовательности HTML для обработки многих случаев. Для этого просто создайте элемент в дереве DOM и задайте innerTextдля элемента свою строку. Затем получите innerHTMLэлемент. Браузер вернет строку в кодировке HTML.

function HtmlEncode(s)
{
  var el = document.createElement("div");
  el.innerText = el.textContent = s;
  s = el.innerHTML;
  return s;
}

Тестовый забег:

alert(HtmlEncode('&;\'><"'));

Вывод:

&amp;;'&gt;&lt;"

Этот метод экранирования HTML также используется библиотекой Prototype JS, хотя и отличается от приведенного мной упрощенного примера.

Примечание. Вам все равно придется самостоятельно экранировать кавычки (двойные и одинарные). Вы можете использовать любой из методов, описанных здесь другими.

Cerebrus
источник
3
обратите внимание, что delete elэто ошибка. perfectionkills.com/understanding-delete
gblazex 07
Когда я пробую, это ничего не дает. Я возвращаю персонажей без изменений.
Moss
1
Извините, я тестировал с нечетными символами, плюс Chrome скрытный и не показывает вам реальный вывод HTML, но Firebug показывает (на самом деле он показал html-объект для символа авторского права, когда сгенерированный источник его не кодирует). Это действительно хорошо работает, <>&но не настолько всеобъемлющее, как решения Neotropic или KooiInc.
Moss
21
с jQuery,output = $('<div>').text(input).html()
дракон
6
Оба метода не преобразуют 'в' и "в", так что его все еще можно использовать для XSS-атак.
Кто-то
32

Эта универсальная функция кодирует каждый не алфавитный символ в свой html-код (числовой):

function HTMLEncode(str) {
    var i = str.length,
        aRet = [];

    while (i--) {
        var iC = str[i].charCodeAt();
        if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
            aRet[i] = '&#'+iC+';';
        } else {
            aRet[i] = str[i];
        }
    }
    return aRet.join('');
}
KooiInc
источник
Звучит очень умно, но я могу заставить его преобразовать только основы:<>&
Moss
NVM. Он отлично работает в консоли, но когда вы выводите в браузер, похоже, что он не преобразовал материал. Что с этим делать?
Moss
@Moss: браузер отображает htmlencoded символы в символы, которые они представляют. Преимущество символов в кодировке html состоит в том, что браузеру не нужно догадываться о переводе (например) диакритических символов и, таким образом, всегда отображать эти символы так, как будто они должны отображаться.
KooiInc
Вы можете подумать об изменении этого, чтобы удалить массивный доступ с str. IE7 и ниже не поддерживают это, и вы можете так же легко вызвать charCodeAt сразу после str с i в качестве аргумента. var iC = str.charCodeAt(i)
Чейз
Этот код не создает правильное значение HTML Entity для символа ±, который должен быть & # 177; но он возвращается & # 65533; который является неизвестным символом .
Пол
21

Из Mozilla ...

Обратите внимание, что charCodeAt всегда будет возвращать значение меньше 65 536. Это связано с тем, что более высокие кодовые точки представлены парой (с меньшим значением) «суррогатных» псевдосимволов, которые используются для включения реального символа. Из-за этого, чтобы проверить или воспроизвести полный символ для отдельных символов со значением 65 536 и выше, для таких символов необходимо получить не только charCodeAt (i), но также charCodeAt (i + 1) (как если бы / воспроизведение строки с двумя> буквами).

Лучшее решение

/**
 * (c) 2012 Steven Levithan <http://slevithan.com/>
 * MIT license
 */
if (!String.prototype.codePointAt) {
    String.prototype.codePointAt = function (pos) {
        pos = isNaN(pos) ? 0 : pos;
        var str = String(this),
            code = str.charCodeAt(pos),
            next = str.charCodeAt(pos + 1);
        // If a surrogate pair
        if (0xD800 <= code && code <= 0xDBFF && 0xDC00 <= next && next <= 0xDFFF) {
            return ((code - 0xD800) * 0x400) + (next - 0xDC00) + 0x10000;
        }
        return code;
    };
}

/**
 * Encodes special html characters
 * @param string
 * @return {*}
 */
function html_encode(string) {
    var ret_val = '';
    for (var i = 0; i < string.length; i++) { 
        if (string.codePointAt(i) > 127) {
            ret_val += '&#' + string.codePointAt(i) + ';';
        } else {
            ret_val += string.charAt(i);
        }
    }
    return ret_val;
}

Пример использования:

html_encode("✈");
user1949536
источник
21

Создайте функцию, которая использует строку replace

function convert(str)
{
  str = str.replace(/&/g, "&amp;");
  str = str.replace(/>/g, "&gt;");
  str = str.replace(/</g, "&lt;");
  str = str.replace(/"/g, "&quot;");
  str = str.replace(/'/g, "&#039;");
  return str;
}
Мэтт Хэнсон
источник
У меня возникла проблема с одиночными кавычками (') и двойными кавычками (") в моем вводимом значении для отображения в html. Сценарий ломался, если пользователь его добавлял.
Дхарам Мали
13

Для тех, кто хочет декодировать код целочисленного символа, например, &#xxx;внутри строки, используйте эту функцию:

function decodeHtmlCharCodes(str) { 
  return str.replace(/(&#(\d+);)/g, function(match, capture, charCode) {
    return String.fromCharCode(charCode);
  });
}

// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int&#8217;l reputation&#8217;!'));

ES6

const decodeHtmlCharCodes = str => 
  str.replace(/(&#(\d+);)/g, (match, capture, charCode) => 
    String.fromCharCode(charCode));

// Will output "The show that gained int’l reputation’!"
console.log(decodeHtmlCharCodes('The show that gained int&#8217;l reputation&#8217;!'));

Христос Литрас
источник
3
Это должен быть принятый ответ, поскольку он все расшифрует.
Quesofat
Это ответ, который я искал. Спасибо.
Дзенис Х.
8
function char_convert() {

    var chars = ["©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","­","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"]; 
    var codes = ["&copy;","&#219;","&reg;","&#158;","&#220;","&#159;","&#221;","&#36;","&#222;","&#37;","&#161;","&#223;","&#162;","&#224;","&#163;","&#225;","&Agrave;","&#164;","&#226;","&Aacute;","&#165;","&#227;","&Acirc;","&#166;","&#228;","&Atilde;","&#167;","&#229;","&Auml;","&#168;","&#230;","&Aring;","&#169;","&#231;","&AElig;","&#170;","&#232;","&Ccedil;","&#171;","&#233;","&Egrave;","&#172;","&#234;","&Eacute;","&#173;","&#235;","&Ecirc;","&#174;","&#236;","&Euml;","&#175;","&#237;","&Igrave;","&#176;","&#238;","&Iacute;","&#177;","&#239;","&Icirc;","&#178;","&#240;","&Iuml;","&#179;","&#241;","&ETH;","&#180;","&#242;","&Ntilde;","&#181;","&#243;","&Otilde;","&#182;","&#244;","&Ouml;","&#183;","&#245;","&Oslash;","&#184;","&#246;","&Ugrave;","&#185;","&#247;","&Uacute;","&#186;","&#248;","&Ucirc;","&#187;","&#249;","&Uuml;","&#64;","&#188;","&#250;","&Yacute;","&#189;","&#251;","&THORN;","&#128;","&#190;","&#252","&szlig;","&#191;","&#253;","&agrave;","&#130;","&#192;","&#254;","&aacute;","&#131;","&#193;","&#255;","&aring;","&#132;","&#194;","&aelig;","&#133;","&#195;","&ccedil;","&#134;","&#196;","&egrave;","&#135;","&#197;","&eacute;","&#136;","&#198;","&ecirc;","&#137;","&#199;","&euml;","&#138;","&#200;","&igrave;","&#139;","&#201;","&iacute;","&#140;","&#202;","&icirc;","&#203;","&iuml;","&#142;","&#204;","&eth;","&#205;","&ntilde;","&#206;","&ograve;","&#145;","&#207;","&oacute;","&#146;","&#208;","&ocirc;","&#147;","&#209;","&otilde;","&#148;","&#210;","&ouml;","&#149;","&#211;","&oslash;","&#150;","&#212;","&ugrave;","&#151;","&#213;","&uacute;","&#152;","&#214;","&ucirc;","&#153;","&#215;","&yacute;","&#154;","&#216;","&thorn;","&#155;","&#217;","&yuml;","&#156;","&#218;"];

    for(x=0; x<chars.length; x++){
        for (i=0; i<arguments.length; i++){
            arguments[i].value = arguments[i].value.replace(chars[x], codes[x]);
        }
    }
 }

char_convert(this);
Neotropic
источник
1
Это отлично работает, но по какой-то причине при смешивании с некоторыми функциями JQuery происходит сбой. Иногда превращается в некоторых, или только парочку. Но в целом отлично работает. ONBLUR = "char_convert (это);"
Neotropic
Я получаю сообщение об ошибке «Uncaught TypeError: невозможно вызвать метод replace» из undefined »в Chrome и« arguments [i] .value is undefined »в Firebug.
Moss
помещать все эти специальные символы в такой массив совершенно бессмысленно. посмотреть другие ответы.
Гэвин
Лучшее решение для меня, единственное, которое конвертирует í в & iacute; например.
Эдхоулер
Как получить эти символы с клавиатуры? Я знаю, что это глупый вопрос ... например, в OS X
PositiveGuy
7

Как уже упоминалось, dragonсамый чистый способ сделать это jQuery:

function HtmlEncode(s) {
    return $('<div>').text(s).html();
}

function HtmlDecode(s) {
    return $('<div>').html(s).text();
}
Серж Саган
источник
Интересно, но если ваша строка содержит пробел, это не изменит ее. Лучше использовать encodeURI (yourString);
Майк Гледхилл
6
function ConvChar (str) {
  c = {'<': '& lt;', '>': '& gt;', '&': '& amp;', '"': '& quot;'," '":' & # 039; ',
       '#': '& # 035;' };
  return str.replace (/ [<&> '"#] / g, функция (и) {return c [s];});
}

предупреждение (ConvChar ('<- "- & -" -> - <- \' - # - \ '->'));

Результат:

& Lt; - & Quot; - & амп; - & Quot; - & GT; - & л; - & # 039; - & # 035; - & # 039; - & GT;

В теге testarea:

<- "- & -" -> - <-'- # -'->

Если вы просто измените немного символов в длинном коде ...

user262419
источник
4

В PREтеге - и в большинстве других тегов HTML - простой текст для пакетного файла, в котором используются символы перенаправления вывода (<и>), нарушит HTML, но вот мой совет : все, что входит в TEXTAREAэлемент, - это не нарушит HTML, главным образом потому, что мы находимся внутри элемента управления, созданного и обрабатываемого ОС, и поэтому его содержимое не анализируется механизмом HTML.

В качестве примера предположим, что я хочу выделить синтаксис моего командного файла с помощью javascript. Я просто вставляю код в текстовое поле, не беспокоясь о зарезервированных символах HTML, и заставляю скрипт обрабатывать innerHTMLсвойство текстового поля, которое вычисляет текст с замененными зарезервированными символами HTML соответствующими объектами ISO-8859-1.

Браузеры автоматически экранируют специальные символы, когда вы извлекаете свойство innerHTMLouterHTML) элемента. Использование текстового поля (и кто знает, может быть, ввод текста) просто избавляет вас от преобразования (вручную или с помощью кода).

Я использую этот трюк, чтобы проверить свою подсветку синтаксиса, и когда я закончу разработку и тестирование, я просто скрываю текстовое поле из поля зрения.

Гектор-J-Rivas
источник
3

Если вам нужна поддержка всех стандартизированных ссылок на именованные символы , юникода и неоднозначных амперсандов , библиотека he - единственное на 100% надежное решение, о котором я знаю!


Пример использования

he.encode('foo © bar ≠ baz 𝌆 qux'); 
// Output : 'foo &#xA9; bar &#x2260; baz &#x1D306; qux'

he.decode('foo &copy; bar &ne; baz &#x1D306; qux');
// Output : 'foo © bar ≠ baz 𝌆 qux'
Джон Слегерс
источник
3

обходной путь:

var temp = $("div").text("<");
var afterEscape = temp.html(); // afterEscape == "&lt;"
keshin
источник
2
var swapCodes   = new Array(8211, 8212, 8216, 8217, 8220, 8221, 8226, 8230, 8482, 169, 61558, 8226, 61607);
var swapStrings = new Array("--", "--", "'",  "'",  '"',  '"',  "*",  "...", "&trade;", "&copy;", "&bull;", "&bull;", "&bull;");

var TextCheck = {
    doCWBind:function(div){
        $(div).bind({
            bind:function(){
                TextCheck.cleanWord(div);
            },
            focus:function(){
                TextCheck.cleanWord(div);
            },
            paste:function(){
                TextCheck.cleanWord(div);
            }
        }); 
    },
    cleanWord:function(div){
        var output = $(div).val();
        for (i = 0; i < swapCodes.length; i++) {
            var swapper = new RegExp("\\u" + swapCodes[i].toString(16), "g");
            output = output.replace(swapper, swapStrings[i]);
        }
        $(div).val(output);
    }
}

Еще один, который мы используем сейчас, работает. Один выше у меня вместо этого вызывает скрипт и возвращает преобразованный код. Хорош только для небольших текстовых полей (имеется в виду не полная статья / блог и т. Д.)


Для выше. Работает на большинстве символов.

var swapCodes   = new Array(8211, 8212, 8216, 8217, 8220, 8221, 8226, 8230, 8482, 61558, 8226, 61607,161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, 402);
var swapStrings = new Array("--", "--", "'",  "'",  '"',  '"',  "*",  "...", "&trade;", "&bull;", "&bull;", "&bull;", "&iexcl;", "&cent;", "&pound;", "&curren;", "&yen;", "&brvbar;", "&sect;", "&uml;", "&copy;", "&ordf;", "&laquo;", "&not;", "&shy;", "&reg;", "&macr;", "&deg;", "&plusmn;", "&sup2;", "&sup3;", "&acute;", "&micro;", "&para;", "&middot;", "&cedil;", "&sup1;", "&ordm;", "&raquo;", "&frac14;", "&frac12;", "&frac34;", "&iquest;", "&Agrave;", "&Aacute;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Egrave;", "&Eacute;", "&Ecirc;", "&Euml;", "&Igrave;", "&Iacute;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Ograve;", "&Oacute;", "&Ocirc;", "&Otilde;", "&Ouml;", "&times;", "&Oslash;", "&Ugrave;", "&Uacute;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&agrave;", "&aacute;", "&acirc;", "&atilde;", "&auml;", "&aring;", "&aelig;", "&ccedil;", "&egrave;", "&eacute;", "&ecirc;", "&euml;", "&igrave;", "&iacute;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;", "&ocirc;", "&otilde;", "&ouml;", "&divide;", "&oslash;", "&ugrave;", "&uacute;", "&ucirc;", "&uuml;", "&yacute;", "&thorn;", "&yuml;", "&#338;", "&#339;", "&#352;", "&#353;", "&#376;", "&#402;");

Я создаю файл javascript, который имеет множество функций, включая перечисленное выше. http://www.neotropicsolutions.com/JSChars.zip

Все необходимые файлы включены. Я добавил jQuery 1.4.4. Просто потому, что я видел проблемы в других версиях, но еще не опробовал их.

Requires: jQuery & jQuery Impromptu from: http://trentrichardson.com/Impromptu/index.php

1. Word Count
2. Character Conversion
3. Checks to ensure this is not passed: "notsomeverylongstringmissingspaces"
4. Checks to make sure ALL IS NOT ALL UPPERCASE.
5. Strip HTML

    // Word Counter
    $.getScript('js/characters.js',function(){
            $('#adtxt').bind("keyup click blur focus change paste",
                function(event){
                    TextCheck.wordCount(30, "#adtxt", "#adtxt_count", event);
            });
            $('#adtxt').blur(
                function(event){
                    TextCheck.check_length('#adtxt'); // unsures properly spaces-not one long word
                    TextCheck.doCWBind('#adtxt');// char conversion
            });

            TextCheck.wordCount(30, "#adtxt", "#adtxt_count", false);
        });

    //HTML
    <textarea name="adtxt" id="adtxt" rows="10" cols="70" class="wordCount"></textarea>
<div id="adtxt_count" class="clear"></div>

    // Just Character Conversions:
    TextCheck.doCWBind('#myfield');

    // Run through form fields in a form for case checking.
    // Alerts user when field is blur'd.
    var labels = new Array("Brief Description","Website URL","Contact Name","Website","Email","Linkback URL");
    var checking = new Array("descr","title","fname","website","email","linkback");
    TextCheck.check_it(checking,labels);

    // Extra security to check again, make sure form is not submitted
    var pass = TextCheck.validate(checking,labels);
    if(pass){
        //do form actions
    }


    //Strip HTML
    <textarea name="adtxt" id="adtxt" rows="10" cols="70" onblur="TextCheck.stripHTML(this);"></textarea>
Neotropic
источник
2
 <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>html</title>  
      <script>
      $(function() {   
      document.getElementById('test').innerHTML = "&amp;";
      });

      </script>
    </head>
    <body>
    <div id="test"></div>
    </body>
    </html>

вы можете просто преобразовать специальные символы в HTML, используя приведенный выше код.

sanman
источник
2

Вот хорошая библиотека, которую я нашел очень полезной в этом контексте.

https://github.com/mathiasbynens/he

По словам его автора:

Он поддерживает все стандартизированные ссылки на именованные символы в соответствии с HTML, обрабатывает неоднозначные амперсанды и другие крайние случаи так же, как браузер, имеет обширный набор тестов и - в отличие от многих других решений JavaScript - он отлично обрабатывает астральные символы Unicode.

Дипеш К.С.
источник
Этот инструмент github.com/mathiasbynens/he для mathias очень хорош, и у него также есть онлайн-площадка
Мохамед Хуссейн,
1

Вот несколько методов, которые я использую без использования JQuery:

Вы можете закодировать каждый символ в своей строке:

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}

Или просто выберите основные символы безопасной кодировки, о которых нужно беспокоиться (&, inebreaks, <,>, "и '), например:

function encode(r){
return r.replace(/[\x26\x0A\<>'"]/g,function(r){return"&#"+r.charCodeAt(0)+";"})
}

test.value=encode('How to encode\nonly html tags &<>\'" nice & fast!');

/*************
* \x26 is &ampersand (it has to be first),
* \x0A is newline,
*************/
<textarea id=test rows="9" cols="55">www.WHAK.com</textarea>

Дэйв Браун
источник
0
function escape (text)
{
  return text.replace(/[<>\&\"\']/g, function(c) {
    return '&#' + c.charCodeAt(0) + ';';
  });
}

alert(escape("<>&'\""));
Крис
источник
0

Это не дает прямого ответа на ваш вопрос, но если вы используете innerHTML, чтобы писать текст внутри элемента, и вы столкнулись с проблемами кодирования, просто используйте textContent, то есть:

var s = "Foo 'bar' baz <qux>";

var element = document.getElementById('foo');
element.textContent = s;

// <div id="foo">Foo 'bar' baz <qux></div>
Симона
источник
0

Мы можем использовать javascript DOMParserдля преобразования специальных символов.

const parser = new DOMParser();
const convertedValue = (parser.parseFromString("&#039 &amp &#039 &lt &gt", "application/xml").body.innerText;
Анкит Арья
источник
0

Ниже приведена простая функция для кодирования escape-символов xml в JS.

Encoder.htmlEncode (unsafeText);

user1211004
источник
0

Вы можете исправить это, заменив функцию .text () на .html (). он работает для меня.

user3040433
источник
-1
<html>
<body>
<script type="text/javascript">
var str= "&\"'<>";
alert('B4 Change:\n' + str);
str= str.replace(/\&/g,'&amp;');
str= str.replace(/</g,'&lt;');
str= str.replace(/>/g,'&gt;');
str= str.replace(/\"/g,'&quot;');
str= str.replace(/\'/g,'&#039;');
alert('After change:\n' + str);
</script>
</body>
</html>      

используйте это для проверки: http://www.w3schools.com/js/tryit.asp?filename=tryjs_text


источник
-1

Да, но если вам нужно куда-то вставить получившуюся строку без ее обратного преобразования, вам необходимо сделать:

str.replace(/'/g,"&amp;amp;#39;"); // and so on
Грэхем
источник
-4

Используйте функцию javaScript escape () , которая позволяет кодировать строки.

например,

escape("yourString");
Бенания
источник
1
Кодировать для ввода URL-адреса не для HTML (и эта функция в любом случае устарела, поскольку она не работает для Unicode).
Quentin
-4
public static string HtmlEncode (string text)
{
    string result;
    using (StringWriter sw = new StringWriter())
    {
        var x = new HtmlTextWriter(sw);
        x.WriteEncodedText(text);
        result = sw.ToString();
    }
    return result;

}
Шахяд Шарги
источник
Это решение даже код javascript? Потому что мне кажется, что это JAVA или C #.
Mr.TK 06
Это не Javascript.
Диего Фортес