Лет 15 назад какой-то кудесник написал следующую функцию на тогда ещё новом языке JavaScript:
function getCookie(name) { var start = document.cookie.indexOf(name + "="); var len = start + name.length + 1; if ((!start) && (name != document.cookie.substring(0, name.length))) { return null; } if (start == -1) return null; var end = document.cookie.indexOf(';', len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len, end )); } |
С тех пор она обошла весь интернет и сотню рейтингов типа «10 самых обосраться лучших JavaScript-функций за все времена».
С тех пор все подряд либо тянут её себе, либо, как обычно, переписывают на свою «ещё более лучшую, ведь я программист», но везде впихивают этот грёбаный indexOf()
.
Чем он вам понравился?
Даже Дэвид Флэнаган в своём «подробном руководстве» не удержался.
indexOf(name + "=")
— мы здесь не переменную «name» ищем, мы ищем переменную, заканчивающуюся на «name».
Что следующий код нам вернёт?
setCookie("sex", "yes"); setCookie("x", "no"); console.log(getCookie("x")); |
Правильно:
sex=yes; x=no;
Ну и escape/unescape
совершенно для других целей нужны.
А посему:
function getAllCookie() { var parts = document.cookie.split(";"), cookie = {}, part, name, value, i, len = parts.length; for (i = 0; i < len; i += 1) { part = parts[i].split("="); name = part[0].replace(/^\s+/, "").replace(/\s+$/, ""); value = (part[1] || "").replace(/^\s+/, "").replace(/\s+$/, ""); cookie[name] = decodeURIComponent(value); } return cookie; } |
ОБОСРАТЬСЯ АФИГЕННЫЙ КОД!!!! РЕЛЬНИ ПОМОГАЕ!
phpdude, 21.02.2012, 19:50
> indexOf(name + «=») – мы здесь не переменную «name» ищем, мы ищем переменную, заканчивающуюся на «name».
ээ… это первая мысля, когда в код вчитался. это что правда так мало людей за 15 лет заметили? O__o
SunChaser, 21.02.2012, 22:18
SunChaser, заметило, скорее всего не так мало.
Но и не заметило немало :)
vasa_c, 22.02.2012, 9:56