Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
10 / 10 / 2
Регистрация: 12.04.2011
Сообщений: 323

preg_match и cp1251

24.08.2013, 16:27. Показов 7583. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Вроде такая тема изъезженная но гуглив пару часов к ряду не нашел решение.

В общем вот
PHP
1
if ( ! preg_match("/^([-а-яёa-z0-9_-])+$/ui", 'привет')) echo 'dfdf';
получаю

Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset ...

Все в кодировке cp1251

В начале файла прописано
PHP
1
2
header('Content-Type: text/html; charset=windows-1251');
setlocale (LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian');
Что не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2013, 16:27
Ответы с готовыми решениями:

JSON + PHP + CP1251
При подготовке данных к отправке в формате json использую функцию json_encode(); однако строки с русскими буковками в кодировке cp1251...

preg_match
Скрипт должен найти в ссылке слово - /admin, а скрипт ищет admin. preg_match('/admin/i', '/illya05_Studio_official/myadmin/ban_list') ...

0 и preg_match
Регулярка: /(\d)/ Строка(в строке 0 но форумные теги глючат и показывают 1): 0 Регулярка не находит 0?Почему и как это исправить?

9
:)
 Аватар для PlumBoom
134 / 134 / 31
Регистрация: 30.03.2013
Сообщений: 428
24.08.2013, 16:58
Попробуйте так:
PHP
1
2
header('Content-Type: text/html; charset=windows-1251');
if(!preg_match('/^([-а-яёa-z0-9_-])+$/Ui', 'привет')) echo 'dfdf';
И уберите:
PHP
1
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian');
1
10 / 10 / 2
Регистрация: 12.04.2011
Сообщений: 323
24.08.2013, 17:16  [ТС]
Цитата Сообщение от PlumBoom Посмотреть сообщение
Попробуйте так:
PHP
1
2
header('Content-Type: text/html; charset=windows-1251');
if(!preg_match('/^([-а-яёa-z0-9_-])+$/Ui', 'привет')) echo 'dfdf';
И уберите:
PHP
1
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian');
Во дела, я тут 3 часа впухал, оказывается все так просто, спасибо работает даже со включенными локалями.
0
24.08.2013, 18:11

Не по теме:

Цитата Сообщение от furyon Посмотреть сообщение
я тут 3 часа впухал, оказывается все так просто
Внимательнее смотрите код :)

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.08.2013, 21:01
Цитата Сообщение от PlumBoom Посмотреть сообщение
Попробуйте так:
зачем здесь убирать жадность?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
25.08.2013, 09:27

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем здесь убирать жадность?
чтоб регулярка щедрая на поиск видимо была:D
еще радуют декоративные элементы по краям символьного класса:)
Code
1
[-...-]
филосовский вопрос: зачем два минуса? чтоб наверняка?:)


и еще, если сталкиваетесь с проблемами, ну гляньте вы в вики, поищите хекс-коды символов в cp1251, и указывайте их кодами... ну все таки много редакторов сейчас настраивают на utf, или вообще пишут в 7ми битке все исходники... ну сами ж запутаетесь, если кто-то или что-то сконвертирует исходник в ютф, а ошибку замучаетесь искать.

Добавлено через 3 минуты

Не по теме:

правда разумеется, от модификатора 'u' избавиться и так и так бы не помешало. cp1251 все-таки немного не однобайтная кодировка:)

0
25.08.2013, 15:03

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем здесь убирать жадность?
ЭЭЭ... Не понял вопроса :scratch:

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.08.2013, 15:41
Цитата Сообщение от PlumBoom Посмотреть сообщение
Не понял вопроса
ну вы заменили u на U.
u - это PCRE_UTF8
Этот модификатор включает дополнительную функциональность PCRE, которая не совместима с Perl: шаблоны обрабатываются как UTF-8 строки. Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ, и в PHP 4.2.3 и выше для Windows платформ. Валидность UTF-8 в шаблоне проверяется начиная с PHP 4.3.5.
U - это PCRE_UNGREEDY
Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные. Но становятся жадными, если за ними следует символ ?. Такая возможность не совместима с Perl. Его также можно установить с помощью (?U) установки модификатора внутри шаблона или добавив знак вопроса после квантификатора (например, .*?).
Вот я и спросил, зачем здесь убирать жадность?
Собственно, я вообще не понимаю, зачем здесь что-то запоминать (да еще и только первый символ). Аналогично, что уже сказано выше - зачем два минуса, наверное, если и правда только "чтоб наверняка"))
0
25.08.2013, 21:25

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
Собственно, я вообще не понимаю, зачем здесь что-то запоминать (да еще и только первый символ)
на самом деле, вообще-то запомнится последний:
PHP
1
2
preg_match_all('`([a-z])+`', 'abc', $matches);
var_dump($matches[1][0]);
вывод:
Code
1
string(1) "c"
. Когда подмаска повторяется, то в результат она сама и все вложенные в нее подмаски совпадут N раз, но в действительности запомнится только последнее совпадение. то есть на практике пожалуй единственный "неточный" квантификатор, который есть смысл применять в такой ситуации: {0,1}, в остальных случаях, если нужно несколько совпадений, приходится исхитряться и придумывать другие варианты...

1
25.08.2013, 21:29

Не по теме:

да, ошибся, конечно же последний :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2013, 21:29
Помогаю со студенческими работами здесь

Preg_match
Привет всем. Пытаюсь preg_mathch`ем проверить правильность написания никнейма в авторизации таким способом $pattern =...

preg_match
Устал материть preg_match. Из-за чего он может зависнуть? Передаю ему html файлы, некоторые он обрабатывает хорошо, но в некоторых что-то...

preg_match $
делаю обычную проверку и все знаки проверяет кроме $ if(!preg_match("/\@|\#/",$test)){ // работает ...

preg_match
мне нужен поиск по полному шаблону, делаю так $arr=explode(" ",$text); foreach($arr as $vl){ if(preg_match("/^\ тоесть...

preg_match
Ку!. while (!feof($rewrite)) { $mytext2=fgets($rewrite); //читаем строку if(preg_match("/&kind=(.*?)&/", $mytext2, $match)) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru