mb_parse_str
Разбирает запросы GET/POST/COOKIE и устанавливает значения глобальных переменных. Так как PHP не работает с исходными данными POST/COOKIE, на данный момент его можно использовать только для работы с данными запроса GET. Функция разбирает строку URL, определяет кодировку, преобразует символы во внутреннюю кодировку скрипта и заносит значения переменных в массив result или в глобальные переменные.
Список параметров
Кодированные данные в URL.
Массив ( array ), содержащий декодированные данные и символы во внутренней кодировке скрипта.
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Список изменений
| Версия | Описание |
|---|---|
| 8.0.0 | Второй параметр стал обязательным. |
| 7.2.0 | Вызов функции mb_parse_str() без второго параметра объявлено устаревшим. |
Смотрите также
- mb_detect_order() — Установка/получение списка кодировок для механизмов определения кодировки
- mb_internal_encoding() — Установка/получение внутренней кодировки скрипта
User Contributed Notes 1 note
7 years ago
$str = ’email=kehaovista@qq.com&city=shanghai&job=Phper’;
mb_parse_str($str, $result);
print_r($result);
//结果
Array
(
[email] => kehaovista@qq.com
[city] => shanghai
[job] => Phper
)
- Функции для работы с многобайтовыми строками
- mb_check_encoding
- mb_chr
- mb_convert_case
- mb_convert_encoding
- mb_convert_kana
- mb_convert_variables
- mb_decode_mimeheader
- mb_decode_numericentity
- mb_detect_encoding
- mb_detect_order
- mb_encode_mimeheader
- mb_encode_numericentity
- mb_encoding_aliases
- mb_ereg_match
- mb_ereg_replace_callback
- mb_ereg_replace
- mb_ereg_search_getpos
- mb_ereg_search_getregs
- mb_ereg_search_init
- mb_ereg_search_pos
- mb_ereg_search_regs
- mb_ereg_search_setpos
- mb_ereg_search
- mb_ereg
- mb_eregi_replace
- mb_eregi
- mb_get_info
- mb_http_input
- mb_http_output
- mb_internal_encoding
- mb_language
- mb_list_encodings
- mb_ord
- mb_output_handler
- mb_parse_str
- mb_preferred_mime_name
- mb_regex_encoding
- mb_regex_set_options
- mb_scrub
- mb_send_mail
- mb_split
- mb_str_pad
- mb_str_split
- mb_strcut
- mb_strimwidth
- mb_stripos
- mb_stristr
- mb_strlen
- mb_strpos
- mb_strrchr
- mb_strrichr
- mb_strripos
- mb_strrpos
- mb_strstr
- mb_strtolower
- mb_strtoupper
- mb_strwidth
- mb_substitute_character
- mb_substr_count
- mb_substr
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
parse_str
Разбирает строку string , которая должна иметь формат строки запроса URL и присваивает значения переменным в текущем контексте (или заносит в массив, если задан параметр result ).
Список параметров
Если указан второй параметр result , то вместо присвоения переменных в текущем контексте они будут сохранены в этом параметре в качестве элементов массива.
Внимание
Использовать эту функцию без параметра result крайне НЕ РЕКОМЕНДУЕТСЯ. Подобное использование объявлено УСТАРЕВШИМ с PHP 7.2. Начиная с PHP 8.0.0, параметр result является обязательным.
Возвращаемые значения
Функция не возвращает значения после выполнения.
Список изменений
Версия Описание 8.0.0 result больше не является необязательным. 7.2.0 Использование parse_str() без второго параметра будет вызывать ошибку уровня E_DEPRECATED . Примеры
Пример #1 Использование parse_str()
// Рекомендуемый подход
parse_str ( $str , $output );
echo $output [ ‘first’ ]; // value
echo $output [ ‘arr’ ][ 0 ]; // foo bar
echo $output [ ‘arr’ ][ 1 ]; // baz// НЕ РЕКОМЕНДУЕТСЯ
parse_str ( $str );
echo $first ; // value
echo $arr [ 0 ]; // foo bar
echo $arr [ 1 ]; // baz
?>Так как имена переменных PHP не могут содержать пробелы и точки, эти символы будут заменены на символ подчёркивания. Такие же правила накладываются на имена ключей в массиве result , если он задан.
Пример #2 Соотношение имён parse_str()
parse_str ( «My Value=Something» );
echo $My_Value ; // Something?php
parse_str ( «My Value=Something» , $output );
echo $output [ ‘My_Value’ ]; // Something
?>Примечания
Замечание:
Все переменные создаются (или заносятся в массив) уже обработанные функцией urldecode() .
Замечание:
Для получения текущей QUERY_STRING , можно использовать переменную $_SERVER[‘QUERY_STRING’] . Кроме того, возможно вы захотите прочесть раздел о переменных вне PHP.
Смотрите также
- parse_url() — Разбирает URL и возвращает его компоненты
- pathinfo() — Возвращает информацию о пути к файлу
- http_build_query() — Генерирует URL-кодированную строку запроса
- urldecode() — Декодирование URL-кодированной строки
User Contributed Notes 32 notes
16 years ago
It bears mentioning that the parse_str builtin does NOT process a query string in the CGI standard way, when it comes to duplicate fields. If multiple fields of the same name exist in a query string, every other web processing language would read them into an array, but PHP silently overwrites them:
# silently fails to handle multiple values
parse_str ( ‘foo=1&foo=2&foo=3’ );# the above produces:
$foo = array( ‘foo’ => ‘3’ );
?>Instead, PHP uses a non-standards compliant practice of including brackets in fieldnames to achieve the same effect.
# bizarre php-specific behavior
parse_str ( ‘foo[]=1&foo[]=2&foo[]=3’ );# the above produces:
$foo = array( ‘foo’ => array( ‘1’ , ‘2’ , ‘3’ ) );
?>This can be confusing for anyone who’s used to the CGI standard, so keep it in mind. As an alternative, I use a «proper» querystring parser function:
function proper_parse_str ( $str ) # result array
$arr = array();# split on outer delimiter
$pairs = explode ( ‘&’ , $str );# loop through each pair
foreach ( $pairs as $i ) # split into name and value
list( $name , $value ) = explode ( ‘=’ , $i , 2 );# if name already exists
if( isset( $arr [ $name ]) ) # stick multiple values into an array
if( is_array ( $arr [ $name ]) ) $arr [ $name ][] = $value ;
>
else $arr [ $name ] = array( $arr [ $name ], $value );
>
>
# otherwise, simply stick it in a scalar
else $arr [ $name ] = $value ;
>
># return result array
return $arr ;
>$query = proper_parse_str ( $_SERVER [ ‘QUERY_STRING’ ]);
?>11 years ago
That’s not says in the description but max_input_vars directive affects this function. If there are more input variables on the string than specified by this directive, an E_WARNING is issued, and further input variables are truncated from the request.
8 years ago
If the arr argument is provided, all its existing elements are removed.
7 years agoif you need custom arg separator, you can use this function. it returns parsed query as associative array.
/**
* Parses http query string into an array
*
* @author Alxcube
*
* @param string $queryString String to parse
* @param string $argSeparator Query arguments separator
* @param integer $decType Decoding type
* @return array
*/
function http_parse_query ( $queryString , $argSeparator = ‘&’ , $decType = PHP_QUERY_RFC1738 ) $result = array();
$parts = explode ( $argSeparator , $queryString );foreach ( $parts as $part ) list( $paramName , $paramValue ) = explode ( ‘=’ , $part , 2 );
switch ( $decType ) case PHP_QUERY_RFC3986 :
$paramName = rawurldecode ( $paramName );
$paramValue = rawurldecode ( $paramValue );
break;case PHP_QUERY_RFC1738 :
default:
$paramName = urldecode ( $paramName );
$paramValue = urldecode ( $paramValue );
break;
>if ( preg_match_all ( ‘/\[([^\]]*)\]/m’ , $paramName , $matches )) $paramName = substr ( $paramName , 0 , strpos ( $paramName , ‘[‘ ));
$keys = array_merge (array( $paramName ), $matches [ 1 ]);
> else $keys = array( $paramName );
>foreach ( $keys as $index ) if ( $index === » ) if (isset( $target )) if ( is_array ( $target )) $intKeys = array_filter ( array_keys ( $target ), ‘is_int’ );
$index = count ( $intKeys ) ? max ( $intKeys )+ 1 : 0 ;
> else $target = array( $target );
$index = 1 ;
>
> else $target = array();
$index = 0 ;
>
> elseif (isset( $target [ $index ]) && ! is_array ( $target [ $index ])) $target [ $index ] = array( $target [ $index ]);
>if ( is_array ( $target )) $target [] = $paramValue ;
> else $target = $paramValue ;
>
>17 years ago
Vladimir: the function is OK in how it deals with &.
& must only be used when outputing URLs in HTML/XML data.
You should ask yourself why you have & in your URL when you give it to parse_str.18 years ago
You may want to parse the query string into an array.
/**
* Similar to parse_str. Returns false if the query string or URL is empty. Because we’re not parsing to
* variables but to array key entries, this function will handle ?[]=1&[]=2 «correctly.»
*
* @return array Similar to the $_GET formatting that PHP does automagically.
* @param string $url A query string or URL
* @param boolean $qmark Find and strip out everything before the question mark in the string
*/
function parse_query_string ( $url , $qmark = true )
if ( $qmark ) $pos = strpos ( $url , «?» );
if ( $pos !== false ) $url = substr ( $url , $pos + 1 );
>
>
if (empty( $url ))
return false ;
$tokens = explode ( «&» , $url );
$urlVars = array();
foreach ( $tokens as $token ) $value = string_pair ( $token , » keyword»>, «» );
if ( preg_match ( ‘/^([^\[]*)(\[.*\])$/’ , $token , $matches )) parse_query_string_array ( $urlVars , $matches [ 1 ], $matches [ 2 ], $value );
> else $urlVars [ urldecode ( $token )] = urldecode ( $value );
>
>
return $urlVars ;
>/**
* Utility function for parse_query_string. Given a result array, a starting key, and a set of keys formatted like «[a][b][c]»
* and the final value, updates the result array with the correct PHP array keys.
*
* @return void
* @param array $result A result array to populate from the query string
* @param string $k The starting key to populate in $result
* @param string $arrayKeys The key list to parse in the form «[][a][what%20ever]»
* @param string $value The value to place at the destination array key
*/
function parse_query_string_array (& $result , $k , $arrayKeys , $value )
if (! preg_match_all ( ‘/\[([^\]]*)\]/’ , $arrayKeys , $matches ))
return $value ;
if (!isset( $result [ $k ])) $result [ urldecode ( $k )] = array();
>
$temp =& $result [ $k ];
$last = urldecode ( array_pop ( $matches [ 1 ]));
foreach ( $matches [ 1 ] as $k ) $k = urldecode ( $k );
if ( $k === «» ) $temp [] = array();
$temp =& $temp [ count ( $temp )- 1 ];
> else if (!isset( $temp [ $k ])) $temp [ $k ] = array();
$temp =& $temp [ $k ];
>
>
if ( $last === «» ) $temp [] = $value ;
> else $temp [ urldecode ( $last )] = $value ;
>
>/**
* Breaks a string into a pair for a common parsing function.
*
* The string passed in is truncated to the left half of the string pair, if any, and the right half, if anything, is returned.
*
* An example of using this would be:
*
* $path = "Account.Balance";
* $field = string_pair($path);
*
* $path is "Account"
* $field is "Balance"
*
* $path = "Account";
* $field = string_pair($path);
*
* $path is "Account"
* $field is false
*
*
* @return string The «right» portion of the string is returned if the delimiter is found.
* @param string $a A string to break into a pair. The «left» portion of the string is returned here if the delimiter is found.
* @param string $delim The characters used to delimit a string pair
* @param mixed $default The value to return if the delimiter is not found in the string
* @desc
*/
function string_pair (& $a , $delim = ‘.’ , $default = false )
$n = strpos ( $a , $delim );
if ( $n === false )
return $default ;
$result = substr ( $a , $n + strlen ( $delim ));
$a = substr ( $a , 0 , $n );
return $result ;
>18 years ago
As of PHP 5, you can do the exact opposite with http_build_query(). Just remember to use the optional array output parameter.
This is a very useful combination if you want to re-use a search string url, but also slightly modify it:
// Modifying criteria:
$output[‘sort’] = «interest»;Results in:
url1: action=search&interest[]=sports&interest[]=music&sort=id
url2: action=search&interest[0]=sports&interest[1]=music&sort=interest(Array indexes are automatically created.)
15 years ago
just a heads up with the example above:
?var[]=123 — the [] has to be urlencoded.
var names and var values — both have to be urlencoded!PHP метод explode для разбиения строки с тремя примерами
Метод PHP explode используется для разбиения строки на заданное число подстрок.
Синтаксис метода
Пример использования PHP метода explode :
$array_name = explode ($delimiter, $string_to_split, $no_of_breaks)
Пример использования explode для разбиения номера телефона
В этом примере мы объявили строковую переменную и присвоили ей номер телефона следующего формата:
После этого применили метод explode для разбиения строки с помощью дефиса ( тире ) в качестве разделителя. Возвращенный массив строк присвоили массиву.
Затем использовали цикл fогеасh для отображения значений элементов массива, которые являются подстроками номера телефона. Поскольку параметр limit не указан, весь номер телефона будет разбит на три подстроки:
Посмотреть демо и код
Пример с пробелом в качестве разделителя
В этом примере PHP explode переноса строки использован пробел в качестве разделителя. Для примера возьмем это строку:
This is explode tutorial that enables string split in PHP.
В примере снова не используется параметр limit . После создания строки мы применили метод explode для ее разбиения. Затем использовали цикл fогеасh для отображения возвращаемых элементов массива.
Наконец, применили функцию count() для вывода количества подстрок в массиве:

Посмотреть демо и код
Пример с параметром limit
Это пример, описанный выше, за исключением того, что здесь мы использовали параметр limit для указания количества разбиений в строке. Ниже показана строка, которая была использована:
This is explode tutorial that enables string split in PHP.
В PHP explode примере, когда мы использовали пробел в качестве разделителя, было возвращено всего 10 подстрок. На этот раз с помощью параметра limit было определено 5 разбиений:

Посмотреть демо и код
На демонстрационной странице отображаются только пять подстрок, при этом последняя включает всю оставшуюся часть строки. Общее количество элементов массива также 5 , а не 10 , как в приведенном выше примере.
Для чего нужен метод explode
Метод explode ( PHP split ) используется для разбиения заданной строки. Допустим, что веб-форма принимает телефонный номер с кодом страны и области в следующем формате:
Нам нужно отделить код страны и области, которые разделены дефисом. Для разбиения телефонного номера можно воспользоваться explode с разделителем дефисом ( тире ) после принятия номера в качестве входного параметра.
Поскольку explode возвращает массив подстрок, метод explode разобьет номер в следующий массив элементов:
- Первый элемент = 001
- Второй элемент = 234
- Третий элемент = 567678
Как использовать функцию PHP explode
В функции PHP explode можно указать три параметра. Последний из них — необязательный, так как указывать количество разбиений ( максимальное количество подстрок ) необязательно.
Описание каждого параметра:
$array_name = explode ($delimiter, $string_to_split, $no_of_breaks)
- $ Array_name — массив; поскольку метод explode возвращает массив строк, полученный разбиением строки;
- $delimiter — определяет разделительный знак. Мы использовали «-» в качестве разделителя, чтобы разбить телефонный номер.
Также можно использовать пробел, запятые или другие слова в качестве $ delimiter .
- Следующим параметром является строка, которую нужно разбить методом explode . Это может быть строковая переменная, предложение и т.д.;
- Последний параметр указывает максимальное количество подстрок или количество разбиений в строке. Это необязательный параметр.
Если в explode array PHP аргумент limit является положительным, возвращаемый массив будет содержать максимальное количество элементов, при этом последний элемент будет содержать остаток строки.
Также можно использовать отрицательное значение. В этом случае все подстроки ( кроме последней ) будут возвращены.
Поскольку explode возвращает массив подстрок, то можно присвоить его массиву. После применения метода можно использовать цикл fогеаch, чтобы перебрать массив элементов, как показано в приведенных выше примерах.
Примечание: Также можно использовать метод str_split для преобразования строки в массив.
ВЛ Виктория Лебедева автор-переводчик статьи « PHP explode method to split a string with 3 examples »
PHP — Как разбить строку на массив — Функции explode, preg_split

Каждый веб-разработчик в своей роботе рано или поздно столкнется с такой задачей как разбить строку на массив в языке программирования PHP. Один из примеров почему может понадобиться разбить строку на массив так это когда вам пришла строка из базы данных о дате рождения пользователя, и нужно разбить эту строку на год, месяц и день по каком нибудь разделителю.
В этой статье мы поговорим о том какие есть простые встроенные в сам php функции которые помогут вам разбить строку на массив без каких либо трудностей. В своем примере я буду разбивать строку на массив с использованием разделителя пробела в качестве передаваемого параметра функции.
- PHP функция explode.
- PHP функция preg_split.
- Итоги.
1. PHP функция explode.
Первая функция о которой мы поговорим называться explode. Функция разбивает строку на массив с указанием разделителя. Функция explode принимает два обязательных параметра и один не обязательный, первый параметр это разделитесь с помощью которого интерпретатор php поймет как разбить строку на массив, а второй параметр это сама строка. Функция как вы уже поняли возвращаем массив.
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
$text = ‘I love php programming language’;
$array = explode(‘ ‘, $text);
?>
Как видим в примере моя строка разбилась на массив с использованием разделителя пробела в качестве первого параметра.
2. PHP функция preg_split.
Вторая функция, которая поможет нам разбить строку на массив называется preg_split. Функция разбивает строку на массив с указанием регулярного выражения. Функция preg_split принимает четыре параметра, два обязательных и два необязательных параметра. В первом параметре нам нужно указать так называемый шаблон по которому будет идти разбивка строки на массив, а вторым параметром передаем саму строку. Если параметры переданы верно, то функция вернет массив, а в противном случае вернет false.
preg_split(string $pattern, string $subject, int $limit = -1, int $flags = 0): array|false
$text = ‘I love php programming language’;
$array = preg_split(‘/\s/’, $text);
?>
Как видим в этом примере моя строка разбилась на массив с использованием шаблона \s который означает пробел.
3. Итоги.
В итоге коллеги мы сегодня рассмотрели возможность разбивки строки на массив с использованием встроенных в сам язык php простых функций. Я рекомендую вам использовать в своих проектах функцию explode потому что она будет быстрее работать чем функция preg_split.
Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.
