Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Ситуация в пхп
Новая тема
Ответить
цитата
02/05/14 в 22:50
Lexikon
Собственно код:
<?php
$url = "http://www.yandex.ru/yandsearch?text=zapros&clid=9582&lr=35";
$arr = parse_url($url);
$reff = $arr['query'];
//echo $reff;
if (stripos($reff, "text=")){
echo "good";
}
?>
вот интересная ситуация
произвожу парсинг url, и при попытке проверить содержится ли в переменной $reff значение "text=", результат FALSE, если удаляю первый символ и произвожу поиск "ext=" выдает TRUE, пытаюсь найти "tex" тоже FALSE. т.е. вся причина в первом символе t.
Что за ерунда такая может быть?
цитата
02/05/14 в 22:58
Yacc
Как-то так
Код:
$url = "http://www.yandex.ru/yandsearch?text=zapros&clid=9582&lr=35";
$query = array();
parse_str(parse_url($url, PHP_URL_QUERY), $query);
if (isset($query['text'])) {
echo "good";
}
цитата
02/05/14 в 22:59
Stek
Лень разбираться. Но как то так:
<?php
$query = $arr['query'];
$params = parse_str($query, parsed_params);
if (isset($params['text'])) {
print "bla bla";
} else {
print "а нифига нету";
}
цитата
02/05/14 в 23:00
Stek
У
Yacc:
комп более быстрый
цитата
02/05/14 в 23:06
Lexikon
ок, спасибо. вариант с parse_str() был
вот просто стало интересно почему, в том варианте не пошло, почему этот первый символ играет роль.
А так еще раз спасибо.
цитата
02/05/14 в 23:50
dm
Lexikon писал:
вот просто стало интересно почему, в том варианте не пошло, почему этот первый символ играет роль.
а почитай про разницу между != и !== в нынешнем пхп например
неявная типизация зло, сишники снизу отказались почти уже, теперь и пхпшники сверху тоже
цитата
02/05/14 в 23:51
Lexikon
нашел выход из ситуации в моем случае.
можно сделать так
if (stripos("_".$reff, "text="))
тогда этот символ подчеркивания уходит в первый символ, и все работает прекрасно
цитата
03/05/14 в 04:14
idk2045
dm писал:
а почитай про разницу между != и !== в нынешнем пхп например
неявная типизация зло, сишники снизу отказались почти уже, теперь и пхпшники сверху тоже
а че там за разница?
многие говорят что неявная типизация зло, а еще многие кодят на уровне error_reporting(E_ALL), но я реально ни разу за свою практику не встречал багов связанных с этими проблемами.
ну с типизацией понятно, там могут быть нюансы в мелких случаях когда все-таки надо isset проверить, это мы не рассматриваем.
а то мне до сих пор кажется что это основное преимущество пхп
ну т.е. пхп был сделан простым - и остается простым, в отличие от прочих
сори за офтоп)
цитата
03/05/14 в 05:07
dm
да врядли совсем оффтоп, все же в программерском подфоруме сидим
на E_ALL конечно кодят только очень самоуверенные личности..
проблема как раз в том, что от версии к версии эту простоту зажимают в рамки - и иногда старый код просто отказывается после апгрейда пхп работать или ведет себя так непредсказуемо, что волосы повыдергиваешь в самых нескромных мечтах пока докопаешься
упомянутый ТС пример
---
http://ru2.php.net/manual/en/function.strpos.php
Warning
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
---
в каком еще языке есть ЧЕТЫРЕ булевских переменных ??
и ==/!= (ну по понятиям типа да..)
и ===/!== (ша ! а вот тута четко все !)
для опять же по определению двоичной алгебры ? дурдом.. галоперидолу всем от заведения
так что насчет рожден был простым - согласен, а вот с остальным приходилось неприятно нарываться уже
цитата
03/05/14 в 08:27
freeek
Lexikon писал:
нашел выход из ситуации в моем случае.
можно сделать так
if (stripos("_".$reff, "text="))
тогда этот символ подчеркивания уходит в первый символ, и все работает прекрасно
Правильный выход из ситуации - правильно пользоваться функцией. В мануале сказано, что если функция не находит вхождения подстроки то она возвращает
FALSE
, тогда проверяем результат учитывая тип возвращаемого значения.
Код:
$url = "http://www.yandex.ru/yandsearch?text=zapros&clid=9582&lr=35";
$arr = parse_url($url);
$reff = $arr['query'];
if (stripos($reff, "text=") !== false) {
echo "good";
}
цитата
03/05/14 в 17:32
ivango
Lexikon писал:
вот просто стало интересно почему, в том варианте не пошло, почему этот первый символ играет роль
потому что он не первый, а нулевой
с нуля начинается нумерация символов в строке
Функция возвращает
позицию
, с которой в строке начинается заданная подстрока. А это 0. А ноль приводится к FALSE.
Надо было результат либо явно сравнивать с FALSE (===FALSE) или проверять на >=0
цитата
16/05/14 в 22:12
Ailk
звиняюсь что так поздно, делать просто нефиг
<?php
$url = "http://www.yandex.ru/yandsearch?text=zapros&clid=9582&lr=35";
$query = parse_url($url, PHP_URL_QUERY);
$query = explode("&", $query);
foreach ($query as $arr){
$val = explode ("=",$arr);
$key[$val[0]] = $val[1];
}
if ($key["text"]) echo $key["text"];
?>
Загоняем все а вссоциативный массив и не морочим голову в дальнейшем.
Новая тема
Ответить
Эта страница в полной версии