PHP сокращение для isset ()? [Дубликат]

Некоторые из решений, размещенных здесь, неэффективны. Повторение поиска регулярного выражения каждый раз, когда сценарий должен получить доступ к параметру, совершенно не нужен, достаточно одной отдельной функции для разделения параметров в объект стиля ассоциативного массива. Если вы не работаете с API истории HTML 5, это необходимо только один раз на загрузку страницы. Другие предложения здесь также не могут правильно декодировать URL.

var urlParams;
(window.onpopstate = function () {
    var match,
        pl     = /\+/g,  // Regex for replacing addition symbol with a space
        search = /([^&=]+)=?([^&]*)/g,
        decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
        query  = window.location.search.substring(1);

    urlParams = {};
    while (match = search.exec(query))
       urlParams[decode(match[1])] = decode(match[2]);
})();

Пример querystring:

?i=main&mode=front&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Hello%20&empty

blockquote>

Результат :

 urlParams = {
    enc: " Hello ",
    i: "main",
    mode: "front",
    sid: "de8d49b78a85a322c4155015fdce22c4",
    empty: ""
}

alert(urlParams["mode"]);
// -> "front"

alert("empty" in urlParams);
// -> true

Это можно легко улучшить, чтобы обрабатывать строки строк в стиле массива. Примером этого является здесь , но поскольку параметры стиля массива не определены в RFC 3986 , я не буду загрязнять этот ответ исходным кодом. Для тех, кто интересуется «загрязненной» версией, посмотрите на ответ Campbeln ниже .

Также, как указано в комментариях, ; является законным разделителем для key=value пар. Для обработки ; или & потребуется более сложное регулярное выражение, которое, как мне кажется, не нужно, потому что редко используется ;, и я бы сказал, что еще более маловероятно, что оба будут использоваться. Если вам нужно поддерживать ; вместо &, просто замените их в регулярном выражении.

Если вы используете язык предварительной обработки на стороне сервера, вы можете использовать его собственные функции JSON для сделай тяжелый подъем для себя. Например, в PHP вы можете написать:

Гораздо проще!

67
задан brentonstrine 3 September 2013 в 23:52
поделиться