Я делаю страницу поиска, на которой вы вводите поисковый запрос, и форма отправляется в search.php?query=your query
. Какая функция PHP является лучшей и что я должен использовать для кодирования/декодирования поискового запроса?Как правильно URL кодировать строку в PHP?
ответ
Для запроса URI используйте urlencode
/urldecode
; для чего-либо еще используйте rawurlencode
/rawurldecode
.
Разница между urlencode
и rawurlencode
является то, что
urlencode
кодирует согласно application/x-www-form-urlencoded (пробел кодируется с+
), тогда какrawurlencode
кодирует в соответствии с обычной Percent-Encoding (пробел кодируется%20
).
* application/x-www-form-urlencoded * - это просто специальный вариант * Процент-кодирование * и применяется только для кодирования данных формы HTML. – Gumbo
Какая кодировка лучше, форма-urlencoded или процентов? –
@Click Upvote: Их нельзя сравнивать таким образом. Формат * application/x-www-form-urlencoded * * * * Формат Percent-Encoding *, за исключением того, что пространство кодируется с помощью '+' вместо '% 20'. Кроме того, * application/x-www-form-urlencoded * используется для кодирования данных формы, в то время как * Percent-Encoding * имеет более общее использование. – Gumbo
Хитроумно названные urlencode() и urldecode().
Однако вам не нужно использовать urldecode()
для переменных, которые отображаются в $_POST
и $_GET
.
Условно-называемый' rawurlencode' и 'rawurldecode' ... –
Вот мой прецедент, требующий исключительного количества кодирования. Может быть, вы думаете, что это надуло, но мы это делаем на производстве. Совпадение, это охватывает все типы кодирования, поэтому я отправляю в качестве учебника.
Пример использования Описание
Кто-то только что купил предоплаченные подарочные карты («маркер») на нашем сайте. У токенов есть соответствующие URL-адреса, чтобы их выкупить. Этот клиент хочет отправить его кому-то другому. Наша веб-страница содержит ссылку mailto
, которая позволяет им это делать.
PHP код
// The order system generates some opaque token
$token = 'w%a&!e#"^2(^@azW';
// Here is a URL to redeem that token
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token);
// Actual contents we want for the email
$subject = 'I just bought this for you';
$body = 'I just bought a widget for you. Please enter your shipping details here: ' . $redeemUrl;
// A URI for the email as prescribed
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body);
// Print an HTML element that links to that page
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';
Примечание: выше предполагает, что вы вывода на text/html
документа. Если тип выходного носителя равен text/json
, просто используйте $retval['url'] = $mailToUri;
, потому что выходное кодирование обрабатывается json_encode()
.
Тестовый случай
- Выполнить код на тестовом PHP сайте (есть канонический один я должен упомянуть здесь?)
- Нажмите на ссылку
- Отправить письмо
- Получить электронное письмо
- Нажмите эту ссылку
Вы должны увидеть:
"args": {
"token": "w%a&!e#\"^2(^@azW"
},
И, конечно, это представление JSON из $token
выше.
У вас возникли проблемы? Браузеры и PHP должны обрабатывать это автоматически уже (например, помещая 'foo bar' в текстовое поле, создавая' foo + bar' в URL-адресе). –
@Felix Я собираюсь вызвать скрипт искателя, используя 'file_get_contents' –