Oc-windows.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php кодирование url

Как правильно URL кодировать строку в PHP?

Я создаю страницу поиска, где вы вводите поисковый запрос и форма отправляется на search.php?query=your query . Какая функция PHP является лучшей и что я должен использовать для кодирования / декодирования поискового запроса?

4 Ответов

Для запроса URI используйте urlencode / urldecode ; для всего остального используйте rawurlencode / rawurldecode .

Разница между urlencode и rawurlencode заключается в том, что

  • urlencode кодируется в соответствии с application/x-www-form-urlencoded (пробел кодируется с + ) в то время как
  • rawurlencode кодируется в соответствии с простой процентной кодировкой (пробел кодируется с помощью %20 ).

Однако вам не нужно использовать urldecode() для переменных, которые появляются в $_POST и $_GET .

Вот мой пример использования, который требует исключительного количества кодирования. Может быть, вы думаете, что это надуманно, но мы запускаем это на производстве. По совпадению, это касается каждого типа кодировки, поэтому я публикую ее в качестве учебника.

Описание случая использования

Кто-то только что купил предоплаченную подарочную карту («token») на нашем сайте. Токены имеют соответствующие URLs для их выкупа. Этот клиент хочет передать его кому-то другому. Наша веб-страница содержит ссылку mailto , которая позволяет им это сделать.

Код PHP

Примечание: вышеизложенное предполагает, что вы выводите в документ text/html . Если ваш выходной тип media — это text/json , то просто используйте $retval[‘url’] = $mailToUri; , потому что выходная кодировка обрабатывается json_encode() .

Тестовый пример

  1. Запустите код на тестовом сайте PHP ( есть ли канонический, который я должен упомянуть здесь? )
  2. Нажать на ссылку
  3. Отправить email
  4. Получить email
  5. Нажмите на эту ссылку

И, конечно же, это JSON представление $token выше.

Вы можете использовать функции кодирования URL PHP имеет

В JavaScript вы можете использовать

Похожие вопросы:

Как вы можете безопасно кодировать URL с помощью JavaScript так, чтобы он мог быть помещен в строку GET? var myUrl = http://example.com/index.html?param=1&anotherParam=2; var myOtherUrl =.

Ниже приведен мой код JS: window.location.href = ‘products.php?price_range=-INFto2000,2001to5000’; Мой вопрос заключается в том, как я могу кодировать URL в javascript & декодировать его в PHP.

я вызываю обработчик событий в jquery для поиска. значение поиска добавляет строку url в jquery и отправляет ее php. мой оригинальный url www.sit.com/index.php?search=a&b я кодирую эту строку.

Я хочу кодировать только queryparams в строке url, используя строку php, url, приведенную ниже https://torrentz-proxy.com/search?q=linux format 2015 added 1 seed>1#12345.

Я пытаюсь url кодировать строку в моем приложении iOS 5 с помощью ARC. Вот как я это делаю: — (NSString *)escape:(NSString *)text < return (__bridge NSString.

Когда я печатаю это: .&page=. > Я понимаю это.

У меня есть строка URL ( NSString ) с пробелами и символами & . Как мне url кодировать всю строку (включая символ амперсанда & и пробелы)?

Есть ли встроенный способ URL кодировать строку в Excel VBA или мне нужно вручную свернуть эту функциональность?

Я узнал, как Base16 кодирует строку в PHP, но как я могу Base36 кодировать и декодировать строку в PHP? Примечание мне нужно это, чтобы заставить строку работать в URLs. BONUS: и если вы знаете, как.

urlencode

(PHP 4, PHP 5, PHP 7)

urlencode — URL-кодирование строки

Описание

Эта функция удобна, когда закодированная строка будет использоваться в запросе, как часть URL, в качестве удобного способа передачи переменных на следующую страницу.

Список параметров

Строка, которая должна быть закодирована.

Возвращаемые значения

Возвращает строку, в которой все не цифро-буквенные символы, кроме -_. должны быть заменены знаком процента (%), за которым следует два шестнадцатеричных числа, а пробелы закодированы как знак сложения (+). Строка кодируется тем же способом, что и POST-данные веб-формы, то есть по типу контента application/x-www-form-urlencoded. Это отличается от кодирования по » RFC 3986 (см. rawurlencode() ) в том, что по историческим причинам, пробелы кодируются как знак «плюс» (+).

Примеры

Пример #1 Пример использования urlencode()

Пример #2 Пример использования urlencode() и htmlentities()

Примечания

Будьте внимательны с переменными, которые могут совпадать с элементами HTML. Такие сущности как &amp, &copy и &pound разбираются браузером и используется как реальная сущность, а не желаемое имя переменной. Это очевидный конфликт, на который W3C указывает в течение многих лет. См. подробности: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2

PHP поддерживает изменение разделителя аргументов на рекомендуемый W3C символ «точку с запятой» путём изменения директивы arg_separator в .ini файле. К сожалению, большинство пользовательских приложений не отправляют данные формы в формате с разделителем «точка с запятой». Более переносимый способ решить эту проблему — это использовать & вместо & в качестве разделителя. Вам не нужно будет для этого изменять PHP-директиву arg_separator. Оставьте разделитель как &, но кодируйте ваши URL с помощью htmlentities() или htmlspecialchars() .

Читать еще:  Как защитить ячейки в эксель

Смотрите также

  • urldecode() — Декодирование URL-кодированной строки
  • htmlentities() — Преобразует все возможные символы в соответствующие HTML-сущности
  • rawurlencode() — URL-кодирование строки согласно RFC 3986
  • rawurldecode() — Декодирование URL-кодированной строки
  • » RFC 3986

User Contributed Notes 23 notes

urlencode function and rawurlencode are mostly based on RFC 1738.

However, since 2005 the current RFC in use for URIs standard is RFC 3986.

Here is a function to encode URLs according to RFC 3986.

function myUrlEncode ( $string ) <
$entities = array( ‘%21’ , ‘%2A’ , ‘%27’ , ‘%28’ , ‘%29’ , ‘%3B’ , ‘%3A’ , ‘%40’ , ‘%26’ , ‘%3D’ , ‘%2B’ , ‘%24’ , ‘%2C’ , ‘%2F’ , ‘%3F’ , ‘%25’ , ‘%23’ , ‘%5B’ , ‘%5D’ );
$replacements = array( ‘!’ , ‘*’ , «‘» , «(» , «)» , «;» , «:» , «@» , «&» , «=» , «+» , «$» , «,» , «/» , «?» , «%» , «#» , «[» , «]» );
return str_replace ( $entities , $replacements , urlencode ( $string ));
>
?>

I needed encoding and decoding for UTF8 urls, I came up with these very simple fuctions. Hope this helps!

function url_encode ( $string ) <
return urlencode ( utf8_encode ( $string ));
>

function url_decode ( $string ) <
return utf8_decode ( urldecode ( $string ));
>
?>

(tilde), while urlencode does.

Don’t use urlencode() or urldecode() if the text includes an email address, as it destroys the «+» character, a perfectly valid email address character.

Unless you’re certain that you won’t be encoding email addresses AND you need the readability provided by the non-standard «+» usage, instead always use use rawurlencode() or rawurldecode().

I needed a function in PHP to do the same job as the complete escape function in Javascript. It took me some time not to find it. But findaly I decided to write my own code. So just to save time:

function fullescape ( $in )
<
$out = » ;
for ( $i = 0 ; $i strlen ( $in ); $i ++)
<
$hex = dechex ( ord ( $in [ $i ]));
if ( $hex == » )
$out = $out . urlencode ( $in [ $i ]);
else
$out = $out . ‘%’ .(( strlen ( $hex )== 1 ) ? ( ‘0’ . strtoupper ( $hex )):( strtoupper ( $hex )));
>
$out = str_replace ( ‘+’ , ‘%20’ , $out );
$out = str_replace ( ‘_’ , ‘%5F’ , $out );
$out = str_replace ( ‘.’ , ‘%2E’ , $out );
$out = str_replace ( ‘-‘ , ‘%2D’ , $out );
return $out ;
>
?>

It can be fully decoded using the unscape function in Javascript.

Like «Benjamin dot Bruno at web dot de» earlier has writen, you can have problems with encode strings with special characters to flash. Benjamin write that:

function flash_encode ( $input )
<
return rawurlencode ( utf8_encode ( $input ));
>
?>

. could do the problem. Unfortunately flash still have problems with read some quotations, but with this one:

function flash_encode ( $string )
<
$string = rawurlencode ( utf8_encode ( $string ));

$string = str_replace ( «%C2%96» , «-» , $string );
$string = str_replace ( «%C2%91» , «%27» , $string );
$string = str_replace ( «%C2%92» , «%27» , $string );
$string = str_replace ( «%C2%82» , «%27» , $string );
$string = str_replace ( «%C2%93» , «%22» , $string );
$string = str_replace ( «%C2%94» , «%22» , $string );
$string = str_replace ( «%C2%84» , «%22» , $string );
$string = str_replace ( «%C2%8B» , «%C2%AB» , $string );
$string = str_replace ( «%C2%9B» , «%C2%BB» , $string );

return $string ;
>
?>

. should solve this problem.

I think the description does not exactly match what the function does:

Returns a string in which all non-alphanumeric characters
except -_. have been replaced with a percent (%) sign followed
by two hex digits and spaces encoded as plus (+) signs.

urlencode(‘ö’) gives me ‘%C3%B6’. So more then just a percent sign followed by two hex digits.

My solution is to replace «%» with «‘».
function urlencode ( $u )
<
return str_replace (array( «‘» , ‘%’ ),array( ‘%27’ , «‘» ), urlencode ( $u ));
>

function urldecode ( $u )
<
return urldecode ( strtr ( $u , «‘» , ‘%’ ));
>
?>

Below is our jsonform source code in mongo db which consists a lot of double quotes. we are able to pass this source code to the ajax form submit function by using php urlencode :

//get the json source code from the mongodb
$jsonform = urlencode ( $this -> data [ ‘Post’ ][ ‘jsonform’ ]);

?>
//AJAX SUBMIT FORM

Constructing hyperlinks safely HOW-TO:

= ‘machine/generated/part’ ;
$url_parameter1 = ‘this is a string’ ;
$url_parameter2 = ‘special/weird «$characters»‘ ;

$link_label = «Click here & you’ll be » ;

echo ‘ , htmlspecialchars ( $url ), ‘»>’ , htmlspecialchars ( $link_label ), » ;
?>

Читать еще:  Php protected private

This example covers all the encodings you need to apply in order to create URLs safely without problems with any special characters. It is stunning how many people make mistakes with this.

Shortly:
— Use urlencode for all GET parameters (things that come after each «=»).
— Use rawurlencode for parts that come before «?».
— Use htmlspecialchars for HTML tag parameters and HTML text content.

if you have a url like this: test-blablabla-4>3-y-3 ( $_GET );

$foo = ‘test-bla-bla-4>2-y-3 ;
$foo_encoded = urlencode ( urlencode ( $foo ));
?>
; ?> «> ; ?>

look on index.php
array (size=0)
empty
test-bla-bla-4%253E2-y-3%253C6

look on test-bla-bla-4%253E2-y-3%253C6
array (size=1)
‘token’ => string ‘bla-bla-4>2-y-3

If you want to pass a url with parameters as a value IN a url AND through a javascript function, such as.

. pass the url value through the PHP urlencode() function twice, like this.

= «index.php? > ;
$url = urlencode ( urlencode ( $url ));

= urldecode ( $_GET [ ‘url’ ]);
?>

If you don’t do this, you’ll find that the result url value in the target script is missing all the var=values following the ? question mark.

Simple static class for array URL encoding

/**
*
* URL Encoding class
* Use : urlencode_array::go() as function
*
*/
class urlencode_array
<

/** Main encoding worker
* @param string $perfix
* @param array $array
* @param string $ret byref Push record to return array
* @param mixed $fe Is first call to function?
*/
private static function encode_part ( $perfix , $array , & $ret , $fe = false )
<
foreach ( $array as $k => $v )
<
switch ( gettype ( $v ))
<
case ‘float’ :
case ‘integer’ :
case ‘string’ : $ret [ $fe ? $k : $perfix . ‘[‘ . $k . ‘]’ ] = $v ; break;
case ‘boolean’ : $ret [ $fe ? $k : $perfix . ‘[‘ . $k . ‘]’ ] = ( $v ? ‘1’ : ‘0’ ); break;
case ‘null’ : $ret [ $fe ? $k : $perfix . ‘[‘ . $k . ‘]’ ] = ‘NULL’ ; break;
case ‘object’ : $v = (array) $v ;
case ‘array’ : self :: encode_part ( $fe ? $perfix . $k : $perfix . ‘[‘ . $k . ‘]’ , $v , $ret , false ); break;
>
>
>

/** UrlEncode Array
* @param mixed $array Array or stdClass to encode
* @returns string Strings ready for send as ‘application/x-www-form-urlencoded’
*/
public static function go ( $array )
<
$buff = array();
if ( gettype ( $array ) == ‘object’ ) $array = (array) $array ;
self :: encode_part ( » , $array , $buff , true );
$retn = » ;
foreach ( $buff as $k => $v )
$retn .= urlencode ( $k ) . ‘=’ . urlencode ( $v ) . ‘&’ ;
return $retn ;
>
>

$buffer = array(
‘master’ => ‘master.zenith.lv’ ,
‘join’ =>array( ‘slave’ => ‘slave1.zenith.lv’ , ‘slave2’ =>array( ‘node1.slave2.zenith.lv’ , ‘slave2.zenith.lv’ )),
‘config’ => new stdClass ()
);
$buffer [ ‘config’ ]-> MaxServerLoad = 200 ;
$buffer [ ‘config’ ]-> MaxSlaveLoad = 100 ;
$buffer [ ‘config’ ]-> DropUserNoWait = true ;

$buffer = urlencode_array :: go ( $buffer );
parse_str ( $buffer , $data_decoded );

header ( ‘Content-Type: text/plain; charset=utf-8’ );
echo ‘Encoded String :’ . str_repeat ( ‘-‘ , 80 ) . «n» ;
echo $buffer ;
echo str_repeat ( «n» , 3 ) . ‘Decoded String byPhp :’ . str_repeat ( ‘-‘ , 80 ) . «n» ;
print_r ( $data_decoded );

Php кодировка кирилицы в URL запросах


Php начинающим

Если в командной строке (URL) мы пропишем русские (кирилица) символы, то они могут автоматически замениться на соответствующие кодированные символы. Все зависит от настроек самого сервера.

Например, напишем
http://f9r.ru/веб_прога

заменится на
http://f9r.ru/%D0%B2%D0%B5%D0%B1_%D0%BF%D1%80%D0%BE%D0%B3%D0%B0

Задача стоит так, найти функцию кодировки URL и раскодировки. Для чего? Напрмер, для того чтобы мы сами могли записать в .htaccess функции преобразования кирилицы НЕзаметно в Правильный URL.

Казалось бы, что в PHP есть встроенные функции urlencode, urldecode, rawurlencode, rawurldecode, однако, сам сервер перекодирует Русские сиволы (кирилица) сначала в UTF-8 и только затем применяет urlencode. Поэтому, данные встроенные функции нам не подойдут и придётся вводить свою функцию.

// функция кодирует строку для URL
function my_url_encode( $s ) <
$s = strtr ( $s , array (» «=> «%20», «а»=>»%D0%B0», «А»=>»%D0%90″,»б»=>»%D0%B1», «Б»=>»%D0%91», «в»=>»%D0%B2», «В»=>»%D0%92», «г»=>»%D0%B3», «Г»=>»%D0%93», «д»=>»%D0%B4», «Д»=>»%D0%94», «е»=>»%D0%B5», «Е»=>»%D0%95», «ё»=>»%D1%91», «Ё»=>»%D0%81», «ж»=>»%D0%B6», «Ж»=>»%D0%96», «з»=>»%D0%B7», «З»=>»%D0%97», «и»=>»%D0%B8», «И»=>»%D0%98», «й»=>»%D0%B9», «Й»=>»%D0%99», «к»=>»%D0%BA», «К»=>»%D0%9A», «л»=>»%D0%BB», «Л»=>»%D0%9B», «м»=>»%D0%BC», «М»=>»%D0%9C», «н»=>»%D0%BD», «Н»=>»%D0%9D», «о»=>»%D0%BE», «О»=>»%D0%9E», «п»=>»%D0%BF», «П»=>»%D0%9F», «р»=>»%D1%80», «Р»=>»%D0%A0», «с»=>»%D1%81», «С»=>»%D0%A1», «т»=>»%D1%82», «Т»=>»%D0%A2», «у»=>»%D1%83», «У»=>»%D0%A3», «ф»=>»%D1%84», «Ф»=>»%D0%A4», «х»=>»%D1%85», «Х»=>»%D0%A5», «ц»=>»%D1%86», «Ц»=>»%D0%A6», «ч»=>»%D1%87», «Ч»=>»%D0%A7», «ш»=>»%D1%88», «Ш»=>»%D0%A8», «щ»=>»%D1%89», «Щ»=>»%D0%A9», «ъ»=>»%D1%8A», «Ъ»=>»%D0%AA», «ы»=>»%D1%8B», «Ы»=>»%D0%AB», «ь»=>»%D1%8C», «Ь»=>»%D0%AC», «э»=>»%D1%8D», «Э»=>»%D0%AD», «ю»=>»%D1%8E», «Ю»=>»%D0%AE», «я»=>»%D1%8F», «Я»=>»%D0%AF»));
return $s ;
>
// функция раскодирует строку из URL
function my_url_decode( $s ) <
$s = strtr ( $s , array («%20″=>» «, «%D0%B0″=>»а», «%D0%90″=>»А», «%D0%B1″=>»б», «%D0%91″=>»Б», «%D0%B2″=>»в», «%D0%92″=>»В», «%D0%B3″=>»г», «%D0%93″=>»Г», «%D0%B4″=>»д», «%D0%94″=>»Д», «%D0%B5″=>»е», «%D0%95″=>»Е», «%D1%91″=>»ё», «%D0%81″=>»Ё», «%D0%B6″=>»ж», «%D0%96″=>»Ж», «%D0%B7″=>»з», «%D0%97″=>»З», «%D0%B8″=>»и», «%D0%98″=>»И», «%D0%B9″=>»й», «%D0%99″=>»Й», «%D0%BA»=>»к», «%D0%9A»=>»К», «%D0%BB»=>»л», «%D0%9B»=>»Л», «%D0%BC»=>»м», «%D0%9C»=>»М», «%D0%BD»=>»н», «%D0%9D»=>»Н», «%D0%BE»=>»о», «%D0%9E»=>»О», «%D0%BF»=>»п», «%D0%9F»=>»П», «%D1%80″=>»р», «%D0%A0″=>»Р», «%D1%81″=>»с», «%D0%A1″=>»С», «%D1%82″=>»т», «%D0%A2″=>»Т», «%D1%83″=>»у», «%D0%A3″=>»У», «%D1%84″=>»ф», «%D0%A4″=>»Ф», «%D1%85″=>»х», «%D0%A5″=>»Х», «%D1%86″=>»ц», «%D0%A6″=>»Ц», «%D1%87″=>»ч», «%D0%A7″=>»Ч», «%D1%88″=>»ш», «%D0%A8″=>»Ш», «%D1%89″=>»щ», «%D0%A9″=>»Щ», «%D1%8A»=>»ъ», «%D0%AA»=>»Ъ», «%D1%8B»=>»ы», «%D0%AB»=>»Ы», «%D1%8C»=>»ь», «%D0%AC»=>»Ь», «%D1%8D»=>»э», «%D0%AD»=>»Э», «%D1%8E»=>»ю», «%D0%AE»=>»Ю», «%D1%8F»=>»я», «%D0%AF»=>»Я»));
return $s ;
>

// возьмём в строке наш алфавит и Пробелы
$S = «а б в гдеё»;
// напечатаем
print $S ;
print «
n»;

// закодируем строку, которую можно передать в URL
$S = my_url_encode( $S );
// напечатаем
print $S ;
print «
n»;

// раскодируем строку, которую можно передать в URL
$S = my_url_decode( $S );
// напечатаем
print $S ;

// получим
// а б в гдеё
// %D0%B0%20%D0%B1%20%D0%B2%20%D0%B3%D0%B4%D0%B5%D1%91
// а б в гдеё
?>

Задача решена. Мы распечатали наш алфатит в преобразованном виде, в том, в каком его обычно преобразует сам сервер. Теперь есть функция кодировки как в URL, так и обратной раскодировки русских символов (кирилица).

Страница: 1
Александр калуга добавлено: 19.08.2019 18:05сообщение № 4
Огромное спасибо .

Дмитрий Таганрог добавлено: 19.10.2012 16:30сообщение № 3
у меня сработал вот такой код
// $t8 =тут получил урл yf с кирилическим параметром типа:
// http://bla-bla.ru/?text=http://kyky.ru+%D0%B1%D0%B0%D1%88%D0%B5%D0%BD%D0%B D%D1%8B%D0%B9+%D0%BA%D1%80%D0%B0%D0%BD;

$t8 = urldecode ( $t8 );
$t8 = iconv( » utf-8 » , » windows-1251 » , $t8 );

получил читабельный русский.
?>

dshooo Новосибирск добавлено: 10.01.2011 15:30сообщение № 2
Можно так реализовать

// Функция выполняет преобразование строки str из кодировки windows-1251 в utf-8

$str = iconv( » windows-1251 » , » utf-8 » , $str ); /* Преобразование кодировки */

// Возвращает строку, в которой все не алфавитно-числовые символы (кроме -_.) заменены на знак процентов (%) с последующими двумя 16-ричными цифрами и пробелами, кодированными как знаки плюс (+)

Справочник по PHP : Функции работы с данными : Строковые функции : Функции URL

смотрим также
    Как прикладная кинезиология лечит хроническую боль в шее наиболее естественным способом.

Материал из Справочник Web-языков

Содержание

parse_url

Обрабатывает URL и возвращает его компоненты.

Эта функция возвращает ассоциативный массив, включающий множество различных существующих компонентов URL. Они включают «scheme», «host», «port», «user», «pass», «path», «query» и «fragment».

parse_str

Заносит строки URL в переменные.

Функция parse_str() интерпретирует строку str, как если бы эта строка содержала в себе переменные и их значения и передавалась бы в URL. Наша функция устанавливает для этих переменных значения.

Если задан второй необязательный параметр, то значения, найденные при помощи функции parse_str(), сохраняться не в глобальных переменных, а в элементах указанного массива.

urlencode

Кодирование строки в URL

Возвращает строку, в которой все не алфавитно-цифровые символы (за исключением дефиса «-» и знака подчеркивания «_» и точки «.») заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричные цифры (обозначающие код символа), а символ пробела заменен на знак «+». Именно таким образом кодируются все данные, посылаемые HTML-формами. Медиа-тип этого кодирования обозначается как application/x-www-form-urlencoded; он отличается от стандарта кодирования RFC 1738 (rawurlencode()) тем, что по историческим причинам пробелы заменяются на знак плюс. Эта функция удобна при кодировании строки для использования в строке запроса, являющейся частью URL, и при передаче переменных на следующую страницу:

urldecode

Декодирование строки из URL

string urldecode (string str)

Декодирует в строке последовательности %## (так в URL кодируются спецсимволы).

rawurlencode

Функция RawUrlEncode() возвращает строку, в которой все не алфавитно-цифровые символы (за исключением дефиса «-«, знака подчеркивания «_» и точки «.») заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричные цифры, которые обозначают код символа. Это кодирование нужно для того, чтобы буквенные символы не обрабатывались в качестве разделителей строки URL и не искажались при передаче в сетях.

rawurldecode

Производит декодирование URL.

Эта функция возвращает строку, в которой последовательности с знаком процента (%) и следующими за ним двумя шестнадцатеричных числа преобразует в символы, соответствующими этому коду. Аналогична urldecode(), но не воспринимает + как пробел.

base64_encode

Кодирует данные в кодировке MIME base64.

base64_encode() возвращает data закодированные в кодировке base64. Эта кодировка разработана для того, чтобы передавать двоичные данные через транспортные слои, которые не содержат восьмой бит, такие как почтовые тела. Данные в кодировке Base64 занимают примерно на 33% больше места, чем оригинал.

base64_decode

Декодирует данные, закодированные в кодировке MIME base64.

base64_decode() декодирует encoded_data и возвращает оригинал данных. Возвращаемые данные могут быть двоичными.

Ссылка на основную публикацию
Adblock
detector