У меня проблема с этим ответом, потому что он не работает, если вы используете один и тот же ключ несколько раз (да, потому что в массиве php ключи уникальны). Так ?key=lorem&key=ipsumчто в результате array(["key"]=>"ipsum")возникает вопрос, есть ли функция для получения s.th. как это array(["key"]=>array("lorem", "ipsum"))или я должен создать эту функцию самостоятельно?
MaBi
11
Технически PHP также будет обрабатываться так, ?key=lorem&key=ipsumкак если бы вы key=ipsumуказали только строку запроса в URL. И я считаю недопустимым повторное использование ключа и ожидание последовательных результатов или сохранение всех экземпляров ключа. Действительный подход, по крайней мере для строки запроса, отправленной в PHP, будет таким ?key[]=lorem&key[]=ipsum, поэтому ваш доморощенный подход может искать любые случаи, &{x}=когда x встречается более одного раза, и заменять на x[](и трактовать? Так же, как &)
Это было полезно! Я решил сделать это ?key[]=lorem&key[]=ipsumнесколько недель назад. Но спасибо, что поделились ссылкой!
МаБи
2
На что следует обратить внимание, так это на строки, содержащие «+», например myemail+alias@gmail.com. Они будут проанализированы parse_str в пробел. ключ = myemail alias@gmail.com.
чувак
62
Иногда parse_str()только примечание является точным, оно может отображаться, например:
$url ="somepage?id=123&lang=gr&size=300";
parse_str () вернет:
Array([somepage?id]=>123[lang]=> gr
[size]=>300)
Было бы лучше сочетать parse_str()с parse_url()так:
Это код PHP для разделения запроса в mysql & mssql
enter code here
function splitquery($strquery){
$arrquery=explode('select',$strquery);
$stry='';$strx='';for($i=0;$i<count($arrquery);$i++){if($i==1){
echo 'select '.trim($arrquery[$i]);}
elseif($i>1){
$strx=trim($arrquery[($i-1)]);if(trim(substr($strx,-1))!='('){
$stry=$stry.'
select '.trim($arrquery[$i]);}else{
$stry=$stry.trim('select '.trim($arrquery[$i]));}
$strx='';}}return $stry;}
Пример:
Запрос перед
выберите xx из xx выберите xx, (выберите xx) из xx, где y = 'cc' выберите xx из xx, оставьте соединение (выберите xx), где (выберите топ 1 xxx из xxx) oder по xxx desc ";
Запрос после
выберите хх из хх
выберите xx, (выберите xx) из xx, где y = 'cc'
выберите хх из хх левого соединения (выберите хх), где (выберите топ 1 ххх из ххх) или от ххх
Для этого конкретного вопроса выбранный ответ является правильным, но если в URL-адресе есть избыточный параметр - например, дополнительное «е» - функция молча завершится сбоем без появления ошибки или исключения:
a=2&b=2&c=5&d=4&e=1&e=2&e=3
Поэтому я предпочитаю использовать свой собственный парсер, например:
//$_SERVER['QUERY_STRING'] = `a=2&b=2&c=5&d=4&e=100&e=200&e=300`
$url_qry_str = explode('&', $_SERVER['QUERY_STRING']);//arrays that will hold the values from the url
$a_arr = $b_arr = $c_arr = $d_arr = $e_arr = array();foreach( $url_qry_str as $param ){
$var = explode('=', $param,2);if($var[0]=="a") $a_arr[]=$var[1];if($var[0]=="b") $b_arr[]=$var[1];if($var[0]=="c") $c_arr[]=$var[1];if($var[0]=="d") $d_arr[]=$var[1];if($var[0]=="e") $e_arr[]=$var[1];}
var_dump($e_arr);// will return ://array(3) { [0]=> string(1) "100" [1]=> string(1) "200" [2]=> string(1) "300" }
Теперь у вас есть все вхождения каждого параметра в своем собственном массиве, вы всегда можете объединить их в один массив, если хотите.
Вы никогда не должны иметь одно и то же имя параметра запроса с разными значениями. Это не имеет смысла, так как в любом случае будет принят только один.
Кристиан
3
@Cristian: «Вы никогда не должны иметь одно и то же имя параметра запроса с разными значениями». Вы правы, но в ответе говорится: «… URL-адрес, по которому функция будет молча отказывать, без выдачи ошибки или исключения». Который может сломать приложение. Хотя этот ответ не очень хороший, он все же выделяет проблему. Особенно, если ваше приложение может быть разбито кем-то, только что произвольно сделавшим запрос с добавленными дополнительными параметрами.
?key=lorem&key=ipsum
что в результатеarray(["key"]=>"ipsum")
возникает вопрос, есть ли функция для получения s.th. как этоarray(["key"]=>array("lorem", "ipsum"))
или я должен создать эту функцию самостоятельно??key=lorem&key=ipsum
как если бы выkey=ipsum
указали только строку запроса в URL. И я считаю недопустимым повторное использование ключа и ожидание последовательных результатов или сохранение всех экземпляров ключа. Действительный подход, по крайней мере для строки запроса, отправленной в PHP, будет таким?key[]=lorem&key[]=ipsum
, поэтому ваш доморощенный подход может искать любые случаи,&{x}=
когда x встречается более одного раза, и заменять наx[]
(и трактовать? Так же, как &)?key[]=lorem&key[]=ipsum
несколько недель назад. Но спасибо, что поделились ссылкой!Иногда
parse_str()
только примечание является точным, оно может отображаться, например:parse_str () вернет:
Было бы лучше сочетать
parse_str()
сparse_url()
так:источник
$_SERVER['QUERY_STRING']
Использование
parse_str()
.источник
Используйте http://us1.php.net/parse_str
Внимание, это использование:
не
источник
parse_str($str,&$arr);
страшная ошибкаЕсли у вас возникли проблемы с преобразованием строки запроса в массив из-за закодированных амперсандов
тогда обязательно используйте
html_entity_decode
Пример:
источник
Есть несколько возможных способов, но для вас уже есть встроенная
parse_str
функцияисточник
Это одна строка для анализа запроса с текущего URL в массив:
источник
Вы можете использовать строковую функцию PHP,
parse_str()
а затемforeach
цикл.источник
Это код PHP для разделения запроса в mysql & mssql
Пример:
Запрос перед
выберите xx из xx выберите xx, (выберите xx) из xx, где y = 'cc' выберите xx из xx, оставьте соединение (выберите xx), где (выберите топ 1 xxx из xxx) oder по xxx desc ";
Запрос после
выберите хх из хх
выберите xx, (выберите xx) из xx, где y = 'cc'
выберите хх из хх левого соединения (выберите хх), где (выберите топ 1 ххх из ххх) или от ххх
Спасибо, из Индонезии Sentrapedagang.com
источник
Для этого конкретного вопроса выбранный ответ является правильным, но если в URL-адресе есть избыточный параметр - например, дополнительное «е» - функция молча завершится сбоем без появления ошибки или исключения:
Поэтому я предпочитаю использовать свой собственный парсер, например:
Теперь у вас есть все вхождения каждого параметра в своем собственном массиве, вы всегда можете объединить их в один массив, если хотите.
Надеюсь, это поможет!
источник