Формування рядка запиту get

завдання
Необхідно сформувати посилання, яка містить пари ім'я / значення в рядку запиту.

Рішення
Закодуйте імена і значення за допомогою функції urlencode (), а рядок запиту створіть за допомогою функції join ():

$ Vars = array ( 'name' => 'Oscar the Grouch',
'Color' => 'green',
'Favorite_punctuation' => '#');
$ Safe_vars = array ();
foreach ($ vars as $ name => $ value) $ safe_vars [] = urlencode ($ name). '='. urlencode ($ value);
>
$ Url = '/muppet/select.php?'. join ( '', $ safe_vars);
$ Vars = array ( 'name' => 'Oscar the Grouch',
'Color' => 'green',
'Favorite_punctuation' => '#');
$ Safe_vars = array ();
foreach ($ vars as $ name => $ value) $ safe_vars [] = urlencode ($ name). '='. urlencode ($ value);
>
$ Url = '/muppet/select.php?'. join ( '', $ safe_vars);

Обговорення
URL, сформований в даному рішенні, виглядає наступним чином:

Рядок запиту містить прогалини, закодовані символом +. Спеціальні символи, такі як #, записані в шістнадцятковій кодуванні, наприклад% 23, оскільки ASCII-значення символу # одно 35, що еквівалентно 23 в шістнадцятковому коді.

Незважаючи на те що функція urlencode () запобігає появі будь-яких спеціальних символів в іменах або значеннях змінних, одержуваних після розбору сконструйованого URL, можна зіткнутися з проблемами, якщо імена змінних починаються з назв примітивів HTML.


Розглянемо наступний неповний URL, призна-
ченний для отримання інформації про стереосистеми:

Елементом HTML, що відображає амперсанд (), є тому броузер може інтерпретувати цей URL як:

Є три способи уникнути спотворення URL, яке можуть викликати впроваджені елементи. Перший полягає в тому, щоб вибирати імена змінних, які не можна сплутати з примітивами, наприклад, _amp замість amp. А другий - в перетворенні символів з еквіва-
стрічками примітивів HTML в ці елементи перед виведенням URL. Останнє робиться за допомогою функції htmlentities ():

$ Url = '/muppet/select.php?'. htmlentities (join ( '', $ safe_vars));

В результаті URL буде виглядати так:

Третій спосіб полягає в тому, щоб замінити значення роздільник аргументів на; шляхом установки параметра конфігурації arg_separator.input в;. Потім треба об'єднати пари ім'я-значення з символом; для отримання рядка запиту: /muppet/select.php?name=Oscar+the+Grouch;color=green;favorite_punctuation=%23

Труднощі можуть виникнути з будь-яким методом GET в URL, в якому не можна явно вказувати крапку з комою, наприклад у формі з методом GET, оскільки призначений для користувача броузер сприймає символ в якості аргументу-роздільник.

Багато браузери не підтримують використання символу; в якості аргументу-роздільник, тому найпростіше уникнути проблем з елементами в URL, вибираючи імена змінних, які не збігаються з іменами елементів.


Якщо ви не можете повністю управляти іменами змінних, то захистіть URL від декодування елементів за допомогою функції htmlentities ().

Схожі статті