Strpos: Проблема с нахождением позиции

Arqin

Новичок
Strpos: Проблема с нахождением позиции

Проблема такая....
Есть строчка:
PHP:
$pos_in = strpos(strtolower($in), strtolower($isk));
При проверке ее работоспособности выяснил интересную вещь...
если вводишь
PHP:
$isk = "созв"; 
$in = "Созвездие";
позицию находит, а если
PHP:
$isk = "созв"; 
$in = "ЗАО Созвездие";
то уже не находит.
Укажите пожалуйста на ошибку.
 

Фанат

oncle terrible
Команда форума
а такая мысль, как вывести на экран операнды, тебе в голову не приходила?
 

Arqin

Новичок
Автор оригинала: zerkms
stripos
Спасибо за намек, но что-то у меня она отказалась работать. Буду ковырять.

Автор оригинала: *****
а такая мысль, как вывести на экран операнды, тебе в голову не приходила?
в итоге я и вывожу один из опереандов на печать. вобщем это функция такого вида:
PHP:
function bolding ($isk, $in) {
  $pos_in = strpos(strtolower($in), strtolower($isk));
  $len_isk = strlen ($isk);
  $bold_it = substr ($in, $pos_in, $len_isk);
  $bolded = str_replace ($bold_it, '<b>'.$bold_it.'</b>', $in);
  return $bolded;
}
-~{}~ 09.02.09 14:25:

т.е. это в идеале функция подсветки искомого текста

-~{}~ 09.02.09 14:29:

возможно можно и компактнее сделать фукцию, но как говорится на что горазд...
 

zerkms

TDD infected
Команда форума
Arqin
phpfaq.ru/debug

ну и разреши немножко поправить тебя, пока у тебя используемая в этом треде терминология не устоялась как должное:
- данные, передаваемые функциям, называются аргументы;
- данные, используемые операторами, называются операнды.

strpos() - функция. "+" - оператор.
 

Arqin

Новичок
zerkms
Прошу прощения... немного оговорился...

-~{}~ 09.02.09 14:51:

Последовал совету *****а...
PHP:
$str = strtolower("ЗАО Созвездие");
выдает ЗАО Созвездие.
Может быть проблема в кодировках?
 

DiMA

php.spb.ru
Команда форума
> $isk = "созв";
> $in = "Созвездие";
> позицию находит, а если

в этом случае тебе возвращается FALSE, а не позиция 0
 

Arqin

Новичок
DiMA
я осведомлен о результатах работы функции strpos =)

Меня интересовал немного другой момент... если прочтете изложенное выше, то поймете.

-~{}~ 09.02.09 15:19:

dimagolov
не совсем понял. Если не трудно поясните.

-~{}~ 09.02.09 15:49:

Может кто подскажет все-таки в чем дело?
Вылез следующий факт.
При попытке применить функцию strtolower к полученной с базы строке она абсолютно никак ее не видоизменяет.
Вот собственно скрипт:
PHP:
function bolding ($isk, $in) {
  return strtolower($in).'='.strtolower($isk);
}
if (!$_GET['q']) return;
$q = trim(strtolower(iconv("UTF-8", "CP1251", $_GET["q"])));
require_once('db_ru.php');
$sql = 'SELECT COMPANY.full_name, COUNTRY.name FROM COMPANY, COUNTRY, SHIPPINGADDR
		WHERE LOWER(full_name) LIKE "%'.$q.'%"
		AND full_name NOT LIKE "(*%"
		AND COUNTRY.OID=SHIPPINGADDR.COUNTRY_OID
		AND COMPANY.address=SHIPPINGADDR.OID
		ORDER BY full_name LIMIT 0,20';
$result = mysql_query($sql) or die(mysql_errno().mysql_error());
while($data=mysql_fetch_row($result)) {
	$data[2] = bolding($q, $data[0]);
	echo $data[2];
}
При вводе в $q = "Созве" получем:

ЗАО Созвездие = созве

Сравнение в базе стоит cp1251_general_ci если это важно.
 

Фанат

oncle terrible
Команда форума
непонятно, к чему был весь текст ниже строчки
При попытке применить функцию strtolower к полученной с базы строке она абсолютно никак ее не видоизменяет.
 

Arqin

Новичок
AmdY
"тяжелый случай" это про мои способности к программированию?

-~{}~ 09.02.09 16:33:

Спасибо всем за "содержательные" советы.

dimagolov
Скорее всего вы были правы и проблема в локалиях, т.к. на локальном сервере с той же базой скрипт работает "на ура!"
 

x-yuri

Новичок
Arqin
PHP:
setlocale( LC_CTYPE, 0 )
[sql]SHOW VARIABLES LIKE 'character_set%';[/sql]
character_set_results скорее всего самая важная в данном случае
 
Сверху