1. JavaScript / Говнокод #9950

    +154

    1. 1
    2. 2
    3. 3
    escape = function(string) {
        return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
      };

    Ваше мнение?

    Запостил: __proto__, 14 Апреля 2012

    Комментарии (12) RSS

    • показать все, что скрытоГде здесь C++, __proto__?
      Ответить
    • антихакир?
      Ответить
    • Почему не &apos; ? И чем мешает косая черта?
      Ответить
    • Нормальное экранирование. Про апостроф автор был не в курсе. Только всё-таки зачем экранировать слэш?
      Ответить
      • к конце с огоньком
        Ответить
      • Чем нормальное? функция escape - уже существует. Да и вместо того, чтобы писать много раз одно и то же - почему не циклом? Или даже рекурсивно и то было бы лучше (т.как короче).
        Но самое ужасное конечно в том, что каждая замена проходит всю строку целиком. Т.е. вместо одного цикла с заменой получилось 6.

        function multiReplace(input){
            return input.replace(
        	    /[&"'\/<>]/g,
        	function(x){
        	    return "&" +
        		{ "&" : "amp",
        		  "\"" : "quot",
        		  "'" : "apos",
        		  "/" : "#x2F",
        		  "<" : "lt",
        		  ">" : "gt" }[x] + ";"; }); }

        Делает то же самое, но в 6 раз быстрее.
        Ответить
    • Достаточно неочевидно, но указанный в сообщении вариант быстрее, чем вариант с одной заменой.
      Ответить

    Добавить комментарий