JQuery & PHP: кодировать и декодировать URL - PullRequest
3 голосов
/ 04 сентября 2011

Я передаю строку через URL на другую страницу при каждом нажатии на ссылку.

Исходный тег a и его href создаются с помощью цикла while PHP, как показано ниже:

<a href=".($row['secondary'] == 'true' ? "secondary_imgs.php?imgId=".$row['imgId']."
    &imgTitle=".$row['imgTitle']."" : "new_arrivals_img/".$row['imgURL']."").">

Примечание: Тег a содержит , содержит другие атрибуты, но я их удалил для простоты.

Затем href добавляется с текущими размерами окна, используя следующую функцию jQuery:

$("a[href^='secondary_imgs.php']").click(function(){
    var pageWidth = $(window).width();
    var pageHeight = $(window).height();
    var url = $(this).attr('href');
    var idx = url.indexOf('&pageWidth=');
    if (idx != -1) {
        url = url.substr(0, idx);
    }
    url += '&pageWidth=' + pageWidth + '&pageHeight=' + pageHeight;
    $(this).attr('href', url);
});

Мой вопрос заключается в том, какой метод (ы) кодирования URL следует использовать вв этом случае, видя, как это нужно будет сделать сначала с PHP, затем с jQuery / JavaScript и, наконец, с помощью PHP?Или будет это нужно сделать как на PHP, так и на jQuery / JavaScript?Оригинальный PHP $row['imgTitle'] будет всегда содержать как минимум пробелы, и поэтому я знаю, что тогда это обязательно нужно сделать.Но, учитывая, что добавленные значения всегда будут переменной, равной числу, нужно ли это также кодировать?

Я знаю, что есть несколько методов кодирования / декодирования URL-адресов на каждом языке кодирования, и я знаю, чтоне достаточно адекватен, чтобы сделать выбор.

Если бы кто-то мог также привести пример того, как я буду выполнять каждый шаг, это было бы очень ценно.

Ответы [ 2 ]

6 голосов
/ 04 сентября 2011

Вы должны использовать urlencode() в PHP для кодирования компонентов URI.

Эквивалентная функция в javascript: encodeURIComponent().

PHP будет декодировать параметры, закодированные таким образом автоматически.

Итак, у вас PHP:

'<a href="..&imgTitle='.urlencode($row['imgTitle'])

И, эквивалентно, в вашем javascript:

'&someparam=' + encodeURIComponent(someValue)
5 голосов
/ 04 сентября 2011

Зачем это нужно делать сначала с помощью PHP?Эта функция JS urlencode может быть закодирована из PHP.Кодировать один раз, декодировать один раз:

function urlencode (str) {
    // URL-encodes string  
    // 
    // version: 1107.2516
    // discuss at: http://phpjs.org/functions/urlencode
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Joris
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: This reflects PHP 5.3/6.0+ behavior
    // %        note 2: Please be aware that this function expects to encode into UTF-8 encoded strings, as found on
    // %        note 2: pages served as UTF-8
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
    str = (str + '').toString();

    // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
...