Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: stripos и кирилица

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Petro
Отправлено: 23 Марта, 2011 - 12:54:54
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Март 2010  


Помог: 2 раз(а)




Приветствую!
Есть строка , в зависимости от искомой строчки (если в переменную записать $isktex='Рус' то $text=false). Если в переменной будет латиница то все впорядке, подскажите пожалуйста как быть с кириличными буковками.

PHP:
скопировать код в буфер обмена
  1. $text='русская версия';
  2. $isktex='рус';
  3. $str=stripos($text, $isktext);
  4.       if ($isktext === false)
  5.       {}
  6.       else {echo $text, '<br>';} //выведет - русская версия
  7. $isktex='Рус';
  8. $str=stripos($text, $isktext);
  9.       if ($isktext === false)
  10.       {}
  11.       else {echo $text, '<br>';} //выведет - русская версия
  12.  

(Отредактировано автором: 23 Марта, 2011 - 14:17:39)



-----
Нет ничего более постоянного, чем временное.
 
 Top
grefon
Отправлено: 23 Марта, 2011 - 13:03:37
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Все правильно. Скрипт идет по первой ветке: if ($isktext === false) {}, по этому ничего и не выводится, ведь функция возвращает 0.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Petro
Отправлено: 23 Марта, 2011 - 13:05:43
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Март 2010  


Помог: 2 раз(а)




Блин, очень обидно, пример который я создал на самом деле работает, а вот оригинал того что я делаю не работает, вот он
PHP:
скопировать код в буфер обмена
  1. $vubor=isset($_REQUEST['vubor']) ? trim($_REQUEST['vubor']): '';
  2. echo $vubor, '<br>';
  3. $t=isset($_REQUEST['iskomuy_text']) ? trim($_REQUEST['iskomuy_text']): '';
  4. if ($vubor='name_versiya')
  5. {
  6.    $ver=mysql_query("select name_versiya from parfumu_versii") or die(mysql(error));
  7.    while($row=mysql_fetch_array($ver))
  8.    {
  9.       $array[]=$row['name_versiya'];
  10.    }
  11.    $max=count($array);
  12.    echo 'искомое сочетание: ', $t, '<br>';
  13.    for ($i=0; $i<=$max; $i++)
  14.    {  //echo $array[$i], ' ';
  15.       $str=stripos($array[$i], $t);
  16.       if ($str === false) {} else {echo $array[$i], '<br>';}
  17.    }
  18. }

(Отредактировано автором: 23 Марта, 2011 - 14:18:34)



-----
Нет ничего более постоянного, чем временное.
 
 Top
Petro
Отправлено: 23 Марта, 2011 - 15:07:02
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Март 2010  


Помог: 2 раз(а)




Еще немного информации
$t=Рус
массив содержит 3 записи
$array[0]=Eho Davidoff
$array[1]=русская версия
$array[2]=теst1
Для примера:
Если задать $t=eHO , то выдаст Eho Davidoff.


-----
Нет ничего более постоянного, чем временное.
 
 Top
Petro
Отправлено: 24 Марта, 2011 - 13:23:46
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Март 2010  


Помог: 2 раз(а)




Свою проблемку решил таким образом(перевел все строки в нижний регистр):
PHP:
скопировать код в буфер обмена
  1. $vubor=isset($_REQUEST['vubor']) ? trim($_REQUEST['vubor']): '';
  2. echo $vubor, '<br>';
  3. $t=isset($_REQUEST['iskomuy_text']) ? trim($_REQUEST['iskomuy_text']): '';
  4. $str_t_lower = [color=red]mb_convert_case($t, MB_CASE_LOWER, "UTF-8");[/color]
  5. if ($vubor=='name_versiya')
  6. {
  7.    $ver=mysql_query("select name_versiya from parfumu_versii") or die(mysql(error));
  8.    while($row=mysql_fetch_array($ver))
  9.    {
  10.       $array[]=$row['name_versiya'];
  11.    }
  12.    $max=count($array);
  13.    echo 'искомое сочетание: ', $t, '<br>';
  14.    for ($i=0; $i<=$max; $i++)
  15.    {  
  16.       $str_array_lower = mb_convert_case($array[$i], MB_CASE_LOWER, "UTF-8");
  17.       $str=[color=red]stripos($str_array_lower, $str_t_lower);[/color]
  18.       if ($str !== false) {echo $array[$i], '<br>';}
  19.    }
  20. }

Теперь если ввести в форму "Рус" то выведет "русская версия", если ввести "ТЕs" выведет "теst1". в яндексе нашел: Принадлежность того или иного символа к буквенным определяется с учетом текущей локали. Это означает, что, например, в используемой по умолчанию локали "C" locale, символ Д не будет преобразован. и еще не корректно работает с кириллицей в кодировке UTF-8
Может всетаки я что то не так делаю или не правильно настроил рнр, возможно есть другое решение более подходящее для подобной задачи. Спасибо за внимание.


-----
Нет ничего более постоянного, чем временное.
 
 Top
Viper
Отправлено: 24 Марта, 2011 - 14:02:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Petro привести к нижнему регистру можно и в запросе SELECT LOWER(`field`)...
И при этом попробуйте mb_strpos или просто strpos.

ЗЫ! Изначально кодировка данных в БД и вводимых данных совпадает?

Можно ещё попробовать жестко задать локаль.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Petro
Отправлено: 24 Марта, 2011 - 14:41:30
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Март 2010  


Помог: 2 раз(а)




Можно и в запросе, но мне потом при выводе нужна оригинальная запись строки.
просто strpos и stripos мне не помог и что интерестно, в самом первом(верхнем) примере работает.

$str=mb_stripos($array[$i], $t, 0, UTF8); - работает, -2 строки Закатив глазки , спасибо!

Цитата:
ЗЫ! Изначально кодировка данных в БД и вводимых данных совпадает?

utf-8 везде стоит.

Как жестко задать локаль? И почему она не задана жестко? И к чему это может привести?
Зарание, спасибо!

(Отредактировано автором: 24 Марта, 2011 - 14:52:47)



-----
Нет ничего более постоянного, чем временное.
 
 Top
Viper
Отправлено: 24 Марта, 2011 - 15:17:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Petro пишет:
Как жестко задать локаль? И почему она не задана жестко? И к чему это может привести?

к примеру setlocale(LC_ALL, 'UTF8');
Жестко она задана в системе, но кодировка ваших данных может отличаться.
Приведет к тому что ваши скрипты будут работать не с системной локалью, а с установленной вами.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 25 Марта, 2011 - 21:22:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Petro Для осуществления решения предполагаемой задачи, заключающейся в организации возможности передачи группы информационных полей, расположение которых в конечном базовом элементном уровне трактования которых обеспечивается на основании включения объектов с вариативным позиционным порядком включения, допустимо использование унифицированной метода достижения поставленной цели, основанного на проведении предшествующей конверсии ассциированных параметров на поверхностном базовом элементном уровне трактования в форму хранения, для которых производится дифференциация относительно разделительных и управляющих элементов в синтаксической форме


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 26 Марта, 2011 - 21:15:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Petro пишет:
И к чему это может привести?
Смена локали везде-везде может привести к одному неприятному последствию. Пример из личного опыта.
Исторически сложилось, что использовался Smarty, а в нем есть возможность форматированного вывода даты год-месяц-день. Вот пока стояла локаль не помню какая, месяцы в календаре были Jan, Feb... Когда я поставил LC_ALL=ru_RU.CP1251, месяцы в этом месте превратились в Янв, Фев. И что-то поломалось.

А вообще, если у вас функции работают с учетом кодировок, желательно локаль выставлять
 
 Top
JustUserR
Отправлено: 28 Марта, 2011 - 01:58:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Champion пишет:
А вообще, если у вас функции работают с учетом кодировок, желательно локаль выставлять
В качестве возможного варианта для осуществления решения предполагаемой задачи, заключающейся в организации возможности передачи группы информационных полей, расположение которых в конечном базовом элементном уровне трактования которых обеспечивается на основании включения объектов с вариативным позиционным порядком включения, допустимо использование фунциональных объектов из размещения в пониженном вложенном базовом элементном уровне трактования, позволяющих производить модификацию элементного определения уровня кодовой таблицы для локального переменного информационног поля


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB