суббота, 29 января 2011 г.

PHP, JavaScript функция извлечения параметров строки запросов URL

Блоггер
tweetn
livejournal
Мой Круг Google Buzz
Совсем недавно столкнулся с необходимостью создания небольшого проекта. Для реализации таковой необходимости мне пришлось прибегнуть к языкам Web - программирования (PHP, JavaScript). Слава Богу с языками программирования сталкивался не раз. Имел опыт программирования по технологии объектного и структурного, как низкого так и более высокого уровня, но признаюсь не на профессиональном уровне. Но все же имею представление. В общем PHP, JS давались не так уж сложно, тем более сегодня есть google (хотя его иногда перезагружают) и есть возможность погуглить. Про HTML молчу....сталкивался достаточно часто...

Бродяжничая по просторам виртуального мира я понемногу пополнял свой интеллект и продвигал разработку задуманного проекта. Столкнулся с необходимостью извлечения параметров, передаваемых через URL. Гуглил JS функции и DOM по работе c ссылками и URL и наткнулся на полезную и простую, как 5 копеек)), функцию извлечения значения параметра, передаваемого через URL, написанную на JS (простите ссылку не помню). Надеюсь данная функция будет полезна многим начинающим Web-разработчикам в целях экономии времени и избавления от рутины:


function getVariable(varName)
{                   
var arg=location.search.substring(1).split('&')
var variable=""
var i
for(i=0;i<arg.length;i++)
{
if(arg[i].split('=')[0]==varName)
{
if(arg[i].split('=').length>1)
{
variable=arg[i].split('=')[1]
}
return variable
}
}
return ""
}
Функция возвращает значение параметра URL, по имени параметра, передаваемого в функцию (параметр varName). К примеру, Вам необходимо передать какую-то информацию в другой документ (например документ "xxxx.php"). Предположим необходимо передать число 5 и текст "Иван". Переход к странице "xxxx.php" осуществляется следующим образом:

<a href="xxxx.php">
xxxx.php
</a>;
Так для передачи в xxxx.php значений "5" и "Иван" параметр href должен принять следующее значение:
xxxx.php?x1=5&x2=Иван
Знак "?" это признак того, что дальше будут перечислены параметры (параметр). Знак "&" это разделитель параметров. x1, x2 - это имена параметров. Для того, чтобы считать переданные значения, в документе xxxx.php необходимо вызвать функцию getVariable(), предварительно объявив ее. Объявить функцию можно как в xxxx.php, так и в отдельном файле. Если функция объявляется в отдельном файле, то ее необходимо подключить.

Итак для считывания значения "5" вызываем функцию с параметром x1:
str_param+=getVariable("x1");
Переменная
str_param содержит значение 5. Для считывания значения "Иван" вызываем функцию с параметром x2:
str_param+=getVariable("x2");
Хочу заметить, что при передаче параметров на русском языке (на Кириллице) необходимо кодировать и декодировать передаваемый параметр. В JS есть функции кодирования и декодирования, например, encodeURI, decodeURI. Т.е. в "xxxx.php?x1=5&x2=Иван", вместо "Иван" должна быть закодированная строка с помощью функции encodeURI. Можно закодировать весь URL. Но для того чтобы извлечь в xxxx.php значение "Иван" а не сочетание "непонятных символов", необходимо декодировать URL с помощью функции decodeURI.

Все очень достаточно просто.)))....Столкнувшись с задачей считывания параметров URL, программируя на PHP, написал аналогичную функцию на PHP:
<?php
        function PhpGetVarUrl($varName)
        {
            $url_code=$_SERVER['QUERY_STRING'];
            $var_mas="";
            $param=strstr($url_code, $varName);
            if($param!=FALSE)
            {
                $len=strlen($param);
                for($i=0;$i<$len;$i++)
{
if($param[$i]=='=')
{
for($k=($i+1);$k<$len;$k++)
{
if($param[$k]!='&')
{
$var_mas.=$param[$k];
}
else return $var_mas;
}
return $var_mas;
}

}
}
else return FALSE;
}
?>
Функция PhpGetVarUrl() предназначена для извлечения параметра (по имени, передаваемому в $varName) строки запроса URL. Функция возвращает строку, содержащую значение параметра. В случае если параметр с именем, переданным в $varName, не найден в строке URL, то функция возвращает FALSE. Доступ к параметрам, переданным скрипту осуществляется с помощью глобального ассоциативного массива $_SERVER. В элемент $_SERVER['QUERY_STRING'] попадает весь текст после знака "?", т.е. если строка запроса представляет собой адрес "
xxxx.php?x1=5&x2=Иван", то элемент $_SERVER['QUERY_STRING'] содержит x1=5&x2=Иван.

Хочу опять же заметить, что при передаче параметров на русском языке (на Кириллице) необходимо кодировать и декодировать передаваемый параметр, поскольку в URL не допускается использование пробелов, а также символов национальных алфавитов, поэтому для передачи русских слов через строку запроса URL или значение параметра следует преобразовать в безопасный режим. В PHP есть функции кодирования и декодирования URL, например urlencode(), urldecode().

Итак для считывания значения "5" вызываем функцию с параметром x1:
$str_param.=PhpGetVarUrl("x1");
Переменная
$str_param содержит значение 5. Для считывания значения "Иван" вызываем функцию с параметром x2:
$str_param+=PhpGetVarUrl("x2");
Надеюсь данная статья будет полезна многим начинающим Web-разработчикам!!!