Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2008, 15:47   #1
alx
Случайный прохожий
Пользователь
 
Аватар для alx
 
Регистрация: 09.02.2008
Сообщений: 40
По умолчанию Кириллица в регулярных выражениях

Здравствуйте.
Имею регулярное выражение:
PHP код:
<?
if (@$_REQUEST['go'])
    {
    print 
setlocale(LC_ALL,"ru_RU.UTF-8").'<br>';
    echo 
preg_match("/^[_0-9A-Za-zА-Яа-яЁё]+$/"$_POST['str']).'<br>';
    echo 
$_POST['str'].'<br>';
    }
    
?>
<form method="POST">
    <input name="str"><br>
    <input type="submit" name='go' value='go!'>
</form>
В результате проверки оказалось, что практически все символы кириллицы не проходят.
Работаю под Lunux.
Подскажите, пожалуйста, где моя ошибка
alx вне форума Ответить с цитированием
Старый 09.02.2008, 17:03   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Что значит "практически все символы кириллицы не проходят"?
Они или все проходят или вообще не проходят.

Попробуй, что тебе выдаст этот скрипт. Теоретически, если что-то с кодировкой на самом сервере, то он должен везде нули выдать.

PHP код:
<?
$str
= array();
$s 192;
for (
$i=1;$i<65;$i++) {
    
$str[$i] = chr($s);
$s++;
}
$str[65] = chr(168);
$str[66] = chr(184);
print 
setlocale(LC_ALL,"ru_RU.UTF-8").'<br>';
for (
$i=1;$i<67;$i++) {
    echo 
preg_match("/^[_0-9A-Za-zА-Яа-яЁё]+$/"$str[$i]).'<br>';
    echo 
$str[$i].'<br>';
}
?>
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 09.02.2008, 17:48   #3
alx
Случайный прохожий
Пользователь
 
Аватар для alx
 
Регистрация: 09.02.2008
Сообщений: 40
По умолчанию

В том то и дело, что некоторые символы проходят, а некоторые - нет!
Вот что Ваш скрипт выдал:

ru_RU.UTF-8
1-ю 1-а 1-б 1-ц 1-д 1-е 1-ф 1-г 1-х 1-и 1-й 1-к 1-л 1-м 1-н 1-о 1-п 1-я 0-р 0-с 0-т 0-у 0-ж 0-в 0-ь 0-ы 0-з 0-ш 0-э 0-щ 0-ч 0-ъ 0-Ю 0-А 0-Б 0-Ц 0-Д 0-Е 0-Ф 0-Г 0-Х 0-И 0-Й 0-К 0-Л 0-М 0-Н 0-О 0-П 0-Я 0-Р 0-С 0-Т 0-У 0-Ж 0-В 0-Ь 0-Ы 0-З 0-Ш 0-Э 0-Щ 0-Ч 0-Ъ 1-╗ 1-╦

(это если поставить в браузере кодировку cp1251)
alx вне форума Ответить с цитированием
Старый 09.02.2008, 18:52   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Тут определённо что-то с кодировкой. В нормальном виде он должен выдавать русский алфавит заглавными и прописными буквами, а в последствии Ё и ё.

Проверьте настройки PHP/Апача.
http://www.promogyg.com/johnatan/chars.php

Вот что должен выдавать нормально настроенный PHP с моим скриптом.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?

Последний раз редактировалось Johnatan; 09.02.2008 в 18:55.
Johnatan вне форума Ответить с цитированием
Старый 09.02.2008, 20:16   #5
alx
Случайный прохожий
Пользователь
 
Аватар для alx
 
Регистрация: 09.02.2008
Сообщений: 40
Печаль

То, что проблема с кодировкой это ясно, но я думал что setlocale() как раз для того, чтобы решить эту проблему...

И что же конкретно должно присутствовать/отсутствовать в настройках, чтобы всё работало?
alx вне форума Ответить с цитированием
Старый 09.02.2008, 20:43   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Какая версия ПХП?
В первую очередь проверить, выключена ли опция "default_charset" в php.ini

Делай phpinfo(); и ищи по слову charset. У меня везде стоит windows-1251 и/или utf-8
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 10.02.2008, 13:01   #7
alx
Случайный прохожий
Пользователь
 
Аватар для alx
 
Регистрация: 09.02.2008
Сообщений: 40
По умолчанию

Версия 5.2.2
charset utf-8
alx вне форума Ответить с цитированием
Старый 10.02.2008, 15:18   #8
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

default_charset стоит? Или это апачевский HTTP_ACCEPT_CHARSET?
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 10.02.2008, 15:40   #9
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

У вас в настройках апача или ПХП (не могу сказать точно) стоит koi8-r. Именно эта кодировка выдаёт такой набор символов, который вы написали выше.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 10.02.2008, 17:03   #10
alx
Случайный прохожий
Пользователь
 
Аватар для alx
 
Регистрация: 09.02.2008
Сообщений: 40
По умолчанию

это defualt_charset.

HTTP_ACCEPT_CHARSET: iso-8859-1, utf-8, utf-16, *;q=0.1
alx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кириллица в HLP andrey4623 Общие вопросы Delphi 2 12.06.2009 16:42