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: комп более быстрый smail101.gif
цитата
02/05/14 в 23:06
 Lexikon
ок, спасибо. вариант с parse_str() был
вот просто стало интересно почему, в том варианте не пошло, почему этот первый символ играет роль. icon_confused.gif
А так еще раз спасибо.
цитата
02/05/14 в 23:50
 dm
Lexikon писал:
вот просто стало интересно почему, в том варианте не пошло, почему этот первый символ играет роль. icon_confused.gif

а почитай про разницу между != и !== в нынешнем пхп например
неявная типизация зло, сишники снизу отказались почти уже, теперь и пхпшники сверху тоже
цитата
02/05/14 в 23:51
 Lexikon
нашел выход из ситуации в моем случае.
можно сделать так
if (stripos("_".$reff, "text="))
тогда этот символ подчеркивания уходит в первый символ, и все работает прекрасно trollface.png
цитата
03/05/14 в 04:14
 idk2045
dm писал:
а почитай про разницу между != и !== в нынешнем пхп например
неявная типизация зло, сишники снизу отказались почти уже, теперь и пхпшники сверху тоже

а че там за разница?
многие говорят что неявная типизация зло, а еще многие кодят на уровне error_reporting(E_ALL), но я реально ни разу за свою практику не встречал багов связанных с этими проблемами.

ну с типизацией понятно, там могут быть нюансы в мелких случаях когда все-таки надо isset проверить, это мы не рассматриваем.

а то мне до сих пор кажется что это основное преимущество пхп smail101.gif ну т.е. пхп был сделан простым - и остается простым, в отличие от прочих

сори за офтоп)
цитата
03/05/14 в 05:07
 dm
да врядли совсем оффтоп, все же в программерском подфоруме сидим
на E_ALL конечно кодят только очень самоуверенные личности.. icon_smile.gif
проблема как раз в том, что от версии к версии эту простоту зажимают в рамки - и иногда старый код просто отказывается после апгрейда пхп работать или ведет себя так непредсказуемо, что волосы повыдергиваешь в самых нескромных мечтах пока докопаешься
упомянутый ТС пример
---
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.
---
в каком еще языке есть ЧЕТЫРЕ булевских переменных ??
и ==/!= (ну по понятиям типа да..)
и ===/!== (ша ! а вот тута четко все !)
для опять же по определению двоичной алгебры ? дурдом.. галоперидолу всем от заведения icon_smile.gif
так что насчет рожден был простым - согласен, а вот с остальным приходилось неприятно нарываться уже
цитата
03/05/14 в 08:27
 freeek
Lexikon писал:
нашел выход из ситуации в моем случае.
можно сделать так
if (stripos("_".$reff, "text="))
тогда этот символ подчеркивания уходит в первый символ, и все работает прекрасно trollface.png


Правильный выход из ситуации - правильно пользоваться функцией. В мануале сказано, что если функция не находит вхождения подстроки то она возвращает 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
звиняюсь что так поздно, делать просто нефиг icon_rolleyes.gif

<?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"];
?>

Загоняем все а вссоциативный массив и не морочим голову в дальнейшем.


Эта страница в полной версии