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 :: eregi и русский язык

 PHP.SU

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


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

> Описание: Проблема со сравниванием строк в регистре
Sirius
Отправлено: 20 Июня, 2010 - 09:19:27
Post Id



Новичок


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


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




Приветствую все.

Проблема в следующем:
функция eregi говорил что ООО Градэко и ООО ГРАДЭКО это разные строки. Судя по описанию функции регистр должен быть проигнорирован, но у меня получается иначе.

первое название берется из текстового файла, а второе как параметр от УРЛа. Если второй параметр пишу так же как и в файле указано, то всё нормально.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     $b=0;
  3.     $Vfile = file("vali.ini");
  4.         $id=trim($_GET['id']);
  5.         foreach($Vfile as $item)
  6.         {
  7.         $parts = explode("::", $item);
  8.     if (eregi($id, $parts[0]))
  9.         {
  10.         $format = "%d/%m/%Y";
  11.         if (StrToTime($parts[1])>=StrToTime(now))
  12.         $b=1;
  13.         }
  14.  

Подскажите, где накасячил?

(Отредактировано автором: 20 Июня, 2010 - 09:19:58)

 
 Top
Champion Супермодератор
Отправлено: 20 Июня, 2010 - 10:04:49
Post Id



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


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


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




Можно попробовать сделать setlocale(LC_ALL, 'ru_RU');
Другой вариант - заменить все русские буквы примерно вот так в шаблоне: ООО [Гг][Рр][аА][Дд][эЭ][кК][оО]. Преобразование строки Градэко в [Гг][Рр][аА][Дд][эЭ][кК][оО] можно автоматизировать, чтоб вручную весь файл не ковырять. Если такая замена действительно поможет, подскажу, как сделать такое преобразование.
Ну и третий вариант - дождаться, пока сюда зайдет JustUserR. Он тоже что-нибудь скажет хорошее.
 
 Top
Sirius
Отправлено: 20 Июня, 2010 - 10:53:46
Post Id



Новичок


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


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




Champion пишет:
Можно попробовать сделать setlocale(LC_ALL, 'ru_RU');

неа, не помогает....
Цитата:
Другой вариант - заменить все русские буквы примерно вот так в шаблоне: ООО [Гг][Рр][аА][Дд][эЭ][кК][оО]. Преобразование строки Градэко в [Гг][Рр][аА][Дд][эЭ][кК][оО] можно автоматизировать, чтоб вручную весь файл не ковырять. Если такая замена действительно поможет, подскажу, как сделать такое преобразование.

да я тоже уже задумывался над вариантом приравнивать все к единому регистру, но разобраться хочется.
Цитата:

Ну и третий вариант - дождаться, пока сюда зайдет JustUserR. Он тоже что-нибудь скажет хорошее.

О великий JustUserR! Взываю к тебе, снизойди к нам, услышь мои мольбы, помоги бестолковому Ламер Радость
 
 Top
EuGen Администратор
Отправлено: 20 Июня, 2010 - 11:10:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




http://forum.php.su/topic.php?fo...m=4&topic=21
- думаю, идея ясна


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Sirius
Отправлено: 20 Июня, 2010 - 11:41:42
Post Id



Новичок


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


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




EuGen пишет:
http://forum.php.su/topic.php?fo...m=4&topic=21
- думаю, идея ясна


Идея-то ясна, я в поиске уже такое находил, прежде чем пост делать, но это не к месту. Всё в одной кодировке работает.
 
 Top
Champion Супермодератор
Отправлено: 20 Июня, 2010 - 11:51:59
Post Id



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


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


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




Не, если бы строка была не в той кодировке, то не матчилась бы строка ни в каком регистре. А когда в одном матчится, в другом нет, то тут другая штука, по-моему.

Кстати, ereg* ведь выбрасывать будут, поэтому стоит перейти на preg_* функции. Может и проблема решится. У меня с ними таких проблем не возникало.
 
 Top
JustUserR
Отправлено: 20 Июня, 2010 - 13:33:40
Post Id



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


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


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




Champion пишет:
Ну и третий вариант - дождаться, пока сюда зайдет JustUserR. Он тоже что-нибудь скажет хорошее.
Вообще если имеется проблема с кодировкой то регулярное выражение действительно не должно работать ни с нижним регистром ни с верхним - однако в зависмости от различных кодировок символы в нижнем регистре могут иметь разные ASCII-коды в то время как символы верхнего регистра могут совпадать
Однако может быть входная строка находится в кодировке UTF8 - в таком случае надо использовать функцию http://www.php.su/functions/?mb-eregi-replace а также дополнительно указать кодировку в http://www.php.su/functions/?mb-regex-encoding


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Sirius
Отправлено: 20 Июня, 2010 - 13:59:13
Post Id



Новичок


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


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




нет, кодировка виндовская. я echo делал обоих строк при трассировке, всё в одинаковых кодировках. Наверно придется приводить всё к единому регистру и не мучаться Однако
(Добавление)
Сначала пробовал привести всё к верхнему регистру, на денвере локально всё работало, а у хостера так же нет, как и вышеуказанная функция. Давай уже мучить Яндекс, нашел:
@setlocale(LC_ALL, 'ru_RU.CP1251');
и всё заработало. Убрал приведение к верхнему регистру, оставил код как было указано в самом верху, и так же работает.

Всем спасибо!!!
 
 Top
JustUserR
Отправлено: 20 Июня, 2010 - 14:34:39
Post Id



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


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


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




Sirius пишет:
Нет, кодировка виндовская. я echo делал обоих строк при трассировке, всё в одинаковых кодировках
Дело в том что кодировка входящих и выводимых PHP-скриптом данных а также строковых констант в исходном может совпадать и при диагностическом выводе на экран данные будут выглядеть как нужно - но если внутреннее представление данных в PHP-скрипте будет трактоваться в другой кодировке то строковые функции не будут работать как надо
Также несмотря на то что mb-функции предназначены для многобайтовых строк они также неплохо выполнять перекодировк и операции для однобайтовых кодировок - поэтому советую вам использовать две вышеуказанные функции и посмотреть что будет Также можно попробовать с помощью iconv или mb_convert_string сделать перевод в другую кодировку - и посмотреть как дела обстоят так


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



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


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


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




Sirius пишет:
Давай уже мучить Яндекс, нашел:
@setlocale(LC_ALL, 'ru_RU.CP1251');
и всё заработало.
Вот многим с тебя пример взять надо.
 
 Top
JustUserR
Отправлено: 20 Июня, 2010 - 14:58:28
Post Id



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


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


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




Champion пишет:
@setlocale(LC_ALL, 'ru_RU.CP1251');
и всё заработало
Собственно сказать предположение и было верное
Цитата:
Дело в том что кодировка входящих и выводимых PHP-скриптом данных а также строковых констант в исходном может совпадать и при диагностическом выводе на экран данные будут выглядеть как нужно - но если внутреннее представление данных в PHP-скрипте будет трактоваться в другой кодировке то строковые функции не будут работать как надо
- поэтому вариант с двойным iconv во внутренную кодировку представления данных в PHP-скрипте также должен работать аналогично


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Sirius
Отправлено: 20 Июня, 2010 - 17:46:19
Post Id



Новичок


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


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




Champion пишет:
Sirius пишет:
Давай уже мучить Яндекс, нашел:
@setlocale(LC_ALL, 'ru_RU.CP1251');
и всё заработало.
Вот многим с тебя пример взять надо.


так я обычно сначала усердно Яндексю, потом гуглю, а уж потом людей мучаю на форумах. Так быстрее. Радость
 
 Top
JustUserR
Отправлено: 21 Июня, 2010 - 12:47:20
Post Id



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


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


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




Sirius пишет:
Так я обычно сначала усердно Яндексю, потом гуглю, а уж потом людей мучаю на форумах. Так быстрее
Просто в таких случаях как в вашем с регистром в регулярных выражениях прослеживается казалось бы неочевидность - вроде бы все работает и кодировка на входе и выходе верная и даже шаблоны срабатывают а вот регистр нет Однако машина регулярных выражений может использовать собственную внутреннюю кодировку и переводить входные данные и строковые константы в нее - поэтому между собой они совпадают но к примеру шаблоны классов символов уже могут не совпадать
Именно по этой причине поллезно смотреть текущую внутреннюю кодировку с помощью функций http://www.php.su/functions/?mb-regex-encoding и http://www.php.su/functions/?mb-...nternal-encoding


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



Новичок


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


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




Благодарю! Посмотрю описание.
 
 Top
JustUserR
Отправлено: 22 Июня, 2010 - 14:16:47
Post Id



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


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


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




Sirius пишет:
Благодарю! Посмотрю описание.
На здоровье! Хотя данные функции принадлежат к разделу функция для обработки многобайтовых multiyte - они также хорошо работают с однобайтовыми строками при указании соответствующей кодировки в настроечной функции Но в отличие от обычных строковых функций они позволяют явно регулировать используемые кодироку - и не меняют общую локаль PHP-скрипта и трактовку сторковых констант в исходном PHP-коде


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный 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