parse_str — Разбирает строку в переменные


Parse_str — Разбирает строку в переменные

parse_str — разбирает строку на переменные.

Описание

void parse_str (string str [, array arr])

Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные в текущей области видимости. Если имеется второй параметр arr , переменные вместо этого сохраняются в этой переменной как элементы массива.

Примечание: поддержка необязательного второго параметра была введена в PHP 4.0.3.

parse_str()

Синтаксис:

parse_str(str [,arr ])

Поддерживается следующими версиями PHP:

Описание функции:

Функции parse_str() преобразует строку в переменные.


Обязательный аргумент. Строка с данными.

string arr Необязательный аргумент. Определяет массив для переменных (добавлено в версии 4.0.3) array

Чаще всего это функция используется для разбора глобальной переменной $_SERVER[‘QUERY_STRING’] в которую попадает весь текст запроса после знака «?»

Разбирайте строку в соответствующие переменные

У меня длинная строка данных, полученных из файла javascript, как и выше. Есть ли сокращение или библиотека, которая будет анализировать это в соответствующие типы данных?

Как вы можете видеть, это список списков, содержащих словари, логические значения, целые числа и нулевые значения.

Я имею в виду, я мог бы сделать это вручную, но я не думаю, что могу сделать это очень быстро или эффективно. Должен быть лучший метод.

Это довольно близко к действительным JSON. Единственным недопустимым является то, что False должен быть false и True должен быть true . Это может быть ошибка транскрипции (. yep)

Я предлагаю вам взглянуть на PyParsing.

Вы также можете взглянуть на библиотеку «scanf» Python.

Если вам нужно решить эту проблему, просто используя встроенные модули Python, я бы рекомендовал использовать регулярное выражение с группами захвата.


EDIT: Хм, я еще раз посмотрел на это. Вы сказали, что это из JavaScript. это выглядит для меня как законный массив JSON. Я попытался использовать json модуль (в частности, функцию метода json.loads() ), но я не смог его разобрать.

Но! Синтаксис Python близок к синтаксису JavaScript. Замените несколько вещей, и eval() может проанализировать это, или ast.literal_eval() . Нам нужно заменить true на True , false с False и null с None до того, как ast.literal_eval() примет его.

Вышеприведенное будет печатать:

Первоначально я показывал определяющие переменные (например, true = True ) и использовал eval() для синтаксического анализа этого, но, конечно, eval() — потенциальное отверстие безопасности; поэтому, если вам нужно разобрать текст, который может появиться на веб-странице или в любом другом ненадежном источнике, стоит немного усилий для импорта ast и вместо этого использовать ast.literal_eval() .

Илон Маск рекомендует:  Подсветка XML-кода

EDIT: Хорошо, модуль json может проанализировать это; проблема заключалась в использовании True вместо true и False вместо false . Просто используйте str.replace() метода str.replace() чтобы исправить это, а затем json.loads() может проанализировать это.

Я как раз собирался опубликовать фрагмент кода с помощью .replace() метода .replace() , когда вопрос снова обновился, а капитализированные True и False стали обычными юридическими JSON-тегами.

Разобрать строку запроса в переменную с помощью функции parse_str ()

Я хочу получить строку запроса из URL и изменить ее на формат строки.

Я скопировал следующий код из других связанных постов в stackoverflow, но он не работает для меня должным образом.

Этот код возвращает вторую переменную $ пароль как и ожидалось, но это не удалось для первой переменной $ uname

Чего-то не хватает в коде?


Любая помощь очень ценится!

Решение

Это выглядит как parse_str не совсем корректно работает с вашим URL. Вы, вероятно, хотите использовать его в сочетании с parse_url

parse_str

parse_str — разбирает строку на переменные.

Описание

void parse_str (string str [, array arr])

Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные в текущей области видимости. Если имеется второй параметр arr, переменные вместо этого сохраняются в этой переменной как элементы массива.

Примечание: поддержка необязательного второго параметра была введена в PHP 4.0.3.

Разобрать строку запроса в переменную с parse_str () функции, связанные с вопросом

February 2020


378 раз

Я хочу, чтобы получить строку запроса из URL и изменить его в формат строки.

Я скопировал следующий код из других соответствующих должностей на StackOverflow, но он не работает должным образом для меня.

Этот код возвращает второй переменный $ пароля , как ожидался, но он не для первого переменного $ uname

Есть ли что-то отсутствует в коде?

Любая помощь очень appriciated!

1 ответы

It looks like parse_str does not work quite correctly with your URL. You probably want to use it in conjunction with parse_url

parse_str

(PHP 4, PHP 5, PHP 7)

parse_str — Разбирает строку в переменные


Описание

Разбирает строку str , которая должна иметь формат строки запроса URL и присваивает значения переменным в текущем контексте.

Для получения текущей QUERY_STRING, можно использовать переменную $_SERVER[‘QUERY_STRING’] . Кроме того, возможно вы захотите прочесть раздел о переменных вне PHP.

Опция magic_quotes_gpc влияет на вывод этой функции, так как parse_str() использует тот же механизм, что используется в PHP для заполнения $_GET , $_POST и других переменных.

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

Если указан второй параметр arr , то вместо присвоения переменных в текущем контексте они будут сохранены в этом параметре в качестве элементов массива.

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

Эта функция не возвращает значения после выполнения.

Илон Маск рекомендует:  Шаблон сайта Маяк HTML + CSS

Примеры

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

= «first=value&arr[]=foo+bar&arr[]=baz» ;
parse_str ( $str );
echo $first ; // value
echo $arr [ 0 ]; // foo bar
echo $arr [ 1 ]; // baz


parse_str ( $str , $output );
echo $output [ ‘first’ ]; // value
echo $output [ ‘arr’ ][ 0 ]; // foo bar
echo $output [ ‘arr’ ][ 1 ]; // baz

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

  • parse_url() — Разбирает URL и возвращает его компоненты
  • pathinfo() — Возвращает информацию о пути к файлу
  • http_build_query() — Генерирует URL-кодированную строку запроса
  • get_magic_quotes_gpc() — Получение текущего значения настройки конфигурации magic_quotes_gpc
  • urldecode() — Декодирование URL-кодированной строки

Коментарии

I wrote a pair of functions using parse_str() that will write values in an array to a textfile and vice versa, read those values from the textfile back into the array. Quite useful if you need to store lots of data but don’t have access to SQL.

Save the array by calling cfg_save($filename,$array) and load it back using $array=cfg_load($filename)

function cfg_load ( $cfgfile ) <
global $newline ;
$setting = «» ;
if( file_exists ( $cfgfile )) <
$setting = fopen ( $cfgfile , «r» );
$ookk = «» ;
while( $ook = fgets ( $setting )) <
#strip comment
$commt = strpos ( $ook , «##» );
if( $commt !== false ) $ook = substr ( $ook , 0 , $commt );
#append
if( $ook != «» ) $ookk = $ookk . «&» . str_replace ( $newline , «\n» , str_replace ( «&» , «%26» , trim ( $ook )));
>
fclose ( $setting );
parse_str ( $ookk , $setting );
>
return $setting ;
>

function cfg_save ( $cfgfile , $setting ) <
global $intArray ;
$intArray = «» ;
for( $i = 0 ; $i 2000 ; $i ++)
$intArray []= $i ;
if( is_array ( $setting )) <
$allkeys = array_keys ( $setting );
foreach( $allkeys as $aKey )
cfg_recurse ( $setting [ $aKey ], $aKey , $outArray );
>
$cfgf = fopen ( $cfgfile , «w» );
foreach( $outArray as $aLine )
fputs ( $cfgf , stripslashes ( $aLine ). «\r\n» );
fclose ( $cfgf );
>

function cfg_recurse ( $stuffIn , $keysofar , & $toAppend ) <
global $intArray , $newline ;
if( is_array ( $stuffIn )) <
$allkeys = array_keys ( $stuffIn );
if( array_slice ( $intArray , 0 , sizeof ( $allkeys ))== $allkeys )
$nokey = true ;
else
$nokey = false ;
foreach( $allkeys as $aKey ) <
if(! $nokey ) $toKey = $aKey ;
cfg_recurse ( $stuffIn [ $aKey ], $keysofar . «[» . $toKey . «]» , $toAppend );
>
>else
$toAppend []= $keysofar . «=» . str_replace ( «\n» , $newline , $stuffIn );
>
?>

Note that these functions support nested arrays of unlimited levels ;)

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 , «=» , «» );
if ( preg_match ( ‘/^([^\[]*)(\[.*\])$/’ , $token , $matches )) <
parse_query_string_array ( $urlVars , $matches [ 1 ], $matches [ 2 ], $value );
> else <
$urlVars [ urldecode ( $token )] = urldecode ( $value );
>
>
return $urlVars ;
>

Илон Маск рекомендует:  Sqlиспользование insert select для построения внешнего соединения

/**
* 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 ;
>
>

Parse_str — Разбирает строку в переменные

parse_str — разбирает строку на переменные.

Описание

void parse_str (string str [, array arr])

Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные в текущей области видимости. Если имеется второй параметр arr , переменные вместо этого сохраняются в этой переменной как элементы массива.

Примечание: поддержка необязательного второго параметра была введена в PHP 4.0.3.

Пример 1. Использование parse_str()


Назад Оглавление Вперёд
ord Вверх print

Материалы, которые находятся на этой страничке, любезно предоставлены Игорем Ивановым


Parse_str — Разбирает строку в переменные

parse_str — разбирает строку на переменные.

Описание

void parse_str (string str [, array arr])

Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные в текущей области видимости. Если имеется второй параметр arr , переменные вместо этого сохраняются в этой переменной как элементы массива.

Примечание: поддержка необязательного второго параметра была введена в PHP 4.0.3.

Parse_str — Разбирает строку в переменные

parse_str — разбирает строку на переменные.

Описание

void parse_str (string str [, array arr])

Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные в текущей области видимости. Если имеется второй параметр arr , переменные вместо этого сохраняются в этой переменной как элементы массива.

Примечание: поддержка необязательного второго параметра была введена в PHP 4.0.3.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL