Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Запутался в функциях рнр помогите разобраться
Новая тема
Ответить
цитата
10/02/09 в 03:07
ibiz
сломал голову, функция нехочет работать
есть простая функция:
Код:
function bot($url)
{
if(eregi("google", $url)){
$bot = "google";
}
elseif(eregi("yahoo", $url)){
$bot = "yahoo";
}
else {
$bot = "undef";
}
return $bot;
}
$url = "http://google.com/searchblabla";
она вызывается из другой функции, другая функция тоже вызывается функцией, итого получилось несколько 3-4 вложенных функций...
если взять отдельно функцию bot($url), то она работает как надо, все возвращает, при этом когда функции вложенные всегда возвращает результат "undef"
eregi пробовал заменять на preg_match и stristr, никакого эффекта
переменная $url в функцию передается, проверял
где я мог накосячить?
цитата
10/02/09 в 04:00
webboxxx
такого быть не может. сам посмотри по коду - в каком случае в $buf кладется 'undef'? только в одном - когда в строка не содержит ни "google", ни "yahoo". eregi не может то работать, то не работать (к слову здесь грамотнее использовать strpos(), но это другая тема). поэтому проблема может быть только в одном - в $url. сделай так:
Код:
function bot($url)
{
if(eregi("google", $url)){
$bot = "google";
}
elseif(eregi("yahoo", $url)){
$bot = "yahoo";
}
else {
$bot = "undef";
}
echo "bot='$bot'; URL: '$url'";
return $bot;
}
и смотри чо выводит. 100% дело не в функции.
цитата
10/02/09 в 04:41
ibiz
ага, уже начал капать в направлении переменной $url
грубо говоря вот что получилось:
echo $url; -
http://google.com/searchblabla
echo strlen($url); - 2
echo $url[0]; - \
echo $url[1]; - 1
echo $url[0].$url[1]; -
http://google.com/searchblabla
тоесть получается переменная содержит два символа "\1", но при выводе на экран выдает то, что надо "http://google.com/searchblabla", как так получается непойму
цитата
10/02/09 в 04:58
Dim82
попробуй использовать конструкцию switch вместо else... elseif
и как передаётся аргумент $url - по значению или по ссылке?
может быть ситуация, что пока $url передается 3-4 раза в функциях, на входе в bot($url) значение $url будет отличатся от входящего, отсюда и "undef"
цитата
10/02/09 в 13:15
ibiz
UP
так и не разобрался почему в переменной $url содержится \1, а выводится урл, подскажите ктонить
цитата
10/02/09 в 13:34
Alexandur
Да ты ...
Да ты ...
Да ты покажи эти функции
Команда print_r($url) выведет всё, что может храниться в переменной $url, которая твоими функциями переделывается в массив.
цитата
10/02/09 в 13:38
webboxxx
ibiz писал:
ага, уже начал капать в направлении переменной $url
грубо говоря вот что получилось:
echo $url; -
http://google.com/searchblabla
echo strlen($url); - 2
echo $url[0]; - \
echo $url[1]; - 1
echo $url[0].$url[1]; -
http://google.com/searchblabla
тоесть получается переменная содержит два символа "\1", но при выводе на экран выдает то, что надо "http://google.com/searchblabla", как так получается непойму
как то странно получается вообще то. даже если url передается по ссылке а не по значению, как может strlen(url) давать 2 не понимаю, все равно должно количество символов возвращать... если до вечера не разберешься, стукни вечером мне в аську, найдем причину. уже аж интересно. ну даже если предположить что все таки с указателями какая-то беда, попробуй в начале функции скопировать url в другую переменную - $tmp = $url; ну и дальше по коду везде изменить. (или в параметрах функции изменить $url на $tmp, а первой строкой $url = $tmp; и потом код менять не придется).
цитата
10/02/09 в 13:48
ibiz
функции не покажу, ибо там по 1-2к строк...
если делать print_r($url) внутри самой функции, то выводит \1
если сунуть в переменную $tmp и выводить в самой функции, то выводит \1
print ($url) - аналогичный результат
если возвращать результат функции, то выводится нормально strlen = 28
функция вызывается после
$code_url = str_replace('{URL}', '\\1', $code_url);
может в этом косяк
цитата
10/02/09 в 13:48
webboxxx
а если еще добавить echo urlencode($url); в этой функции, чо выводит?
цитата
10/02/09 в 13:51
ibiz
urlencode($tmp) - %5C1
цитата
10/02/09 в 13:55
Alexandur
ibiz писал:
$code_url = str_replace('{URL}', '\\1', $code_url);
str_replace с регулярными не работает
попробуй так:
Цитата:
$code_url = preg_replace('/\{URL\}/', '\\1', $code_url);[/
цитата
10/02/09 в 13:56
webboxxx
давай полный кусок кода начиная от $code_url = str_replace('{URL}', '\\1', $code_url); и плюс саму функцию со всеми отладочными echo которые ты проставил.
цитата
10/02/09 в 13:57
webboxxx
gimcnuk писал:
str_replace с регулярными не работает
попробуй так:
он тут их и не использует.
цитата
10/02/09 в 17:48
Dim82
Попоробуй отследить как меняется $url в функциях, (как писал выше
webboxxx
$url = $tmp)
$url = $tmp1 в начале,
$url = $tmp2 середине,
$url = $tmp3 в конце.
И повыводить значения $tmp...
Код:
echo $url; -
http://google.com/searchblabla
echo strlen($url); - 2
- это как-то подозрительно. что-то преобразовывает $url
. может при преобразовании строки в массив косяк получается...
цитата
10/02/09 в 19:03
ibiz
да походу в ссылках запутался...
вот тут какая может быть ошибка?
$text = preg_replace("#\[url\](.*?)\[/url\]#si", bot('\\1'), $text);
цитата
10/02/09 в 19:41
Dim82
$text = preg_replace('
/
#\[url\](.*?)\[/url\]#si
/
', bot('\\1'), $text);
#-?, [
/
url\] - ?
и в квадратных скобках вроде как последовательность символов указывается.
регулярка неправильна - сходу не готов написать как надо, тем более постановки задачи не знаю (что и где заменить надо)
вот тут по уралм и регуляркам, мож пригодится
http://www.pcre.ru/examples/links/text/40/
http://www.phpclub.ru/detail/article/regexp_1
цитата
10/02/09 в 19:55
ibiz
Dim82:
не в регулярке загвоздка, пускай даже она неправильная
вот моя логика действий:
$text = preg_replace("#\[url\](.*?)\[/url\]#si", bot('\\1'), $text);
1)для обработки берем весь текст $text
2)то, что между тегами
http://google.com/serch..
выделяем, как искомое
3)передаем в функцию bot($url) то, что нашли в тексте
4)в bot($url) обрабатываем полученный урл и возвращаем
5)результатом функции bot($url) заменяем то, что между тегами
http://google.com/serch..
, тоесть по идее должно получиться
http://google.com/serch..
=> google
цитата
10/02/09 в 20:12
ibiz
спасибо heckfy
решил с помощью preg_replace_callback
цитата
10/02/09 в 20:13
xheckfy
Новая тема
Ответить
Эта страница в полной версии