|
|
|
|
echo preg_match("/^[A-Za-zА-Яа-яЁё0-9 !\"№;%:?*()_/~@#$%^&*+|}><{`-=\]'/.,;[]+$/", "Прост отекст");
|
Выдает:
Warning: preg_match() [function.preg-match]: Unknown modifier '.' in
Но ведь это не модификатор, а часть выборки символов! Что я упускаю? (скрипт проверяем на наличие всех доступных символов) | |
|
|
|
|
|
|
|
для: lElectroHardl
(18.02.2012 в 20:45)
| | Хм... ну как минимум / и [ нужно экранировать, а лучше вообще все содержимое прогнать через preg_quote(). | |
|
|
|
|
|
|
|
для: cheops
(18.02.2012 в 20:47)
| | Какая-то фигня получается
preg_match("/^[A-Za-zА-Яа-яЁё0-9 \!\"№;%\:\?\*\(\)_\/~@#\$%\^&\*\+\|\}\>\<\{`\-\=\\\]'\.,;\[]+$/", "Строка");// убрал то, что выделенно - работает
|
Не работает (говорит, что в строке нет таких символов (0) | |
|
|
|
|
|
|
|
для: lElectroHardl
(18.02.2012 в 21:08)
| | Лучше все-таки задействовать preg_quote(). | |
|
|
|
|
|
|
|
для: cheops
(18.02.2012 в 21:12)
| | Я задействовал. Она выдала такой вот результат. | |
|
|
|
|
|
|
|
для: lElectroHardl
(18.02.2012 в 21:08)
| | А у вас не utf-8? | |
|
|
|
|
|
|
|
для: Sfinks
(18.02.2012 в 22:55)
| | Нет. У меня крякозябры. Вот их и нужно из строки отфильтровать. | |
|
|
|
|
|
|
|
для: lElectroHardl
(18.02.2012 в 21:08)
| | У вас символы дублировались в [ ]. Вот так работает:
preg_match( "#^[а-яё\w\d\s\.\+\*\?\[\]\>\<\{\}\(\)\$\=\!\|\:\-\^\"\#\\№%/~@&`',;]+$#iu", "Строка" );
| Если не utf-8, уберите "u" в конце. | |
|
|
|
|
|
|
|
для: lElectroHardl
(18.02.2012 в 21:08)
| | Можно еще вот так сократить:
preg_match( "#^[а-яё,;№%/~@&`'\"\w\s\Q.+*?[]><{}()$=!|:-^\#\E]+$#i" , "С\"т-ро$к%а" );
|
| |
|
|
|
|
|
|
|
для: Sfinks
(18.02.2012 в 23:22)
| | Не работает.
Не работает.
Результат: 0; | |
|
|
|
|
|
|
|
для: lElectroHardl
(19.02.2012 в 00:06)
| | У меня оба варианта работают. РВ оба правильные. Значит у вас с локалью проблемы.
Проверьте не на "строка", а на "stroka". Если сработает, значит:
1 - убедитесь еще раз в кодировке
2 - измените в начале а-яё обратно на а-яёА-ЯЁ и на конце i уберите. | |
|
|
|
|
|
|
|
для: Sfinks
(19.02.2012 в 09:56)
| | Поковыряем.
Я другой вариант нашел как проверить, есть ли кракозябры в строке.
Смотрим, какой результат выдаст нам
<?
mb_convert_encoding("Stroka",'CP1251','UTF-8, KOI8-R');
mb_convert_encoding("ГЂ ГЇГ® ГІГҐГ¬Гûì óëèöà строка Г¬ ãóëÿåò äîæä",'CP1251','UTF-8, KOI8-R');
mb_convert_encoding("Строка ",'CP1251','UTF-8, KOI8-R');
|
Запоминаем результаты. И радуемся :)
Правда пока точно не знаю, 100%-й ли результат будет... | |
|
|
|
|
|
|
|
для: lElectroHardl
(19.02.2012 в 12:23)
| | добрый день! появилась ошибка
Warning: preg_match() [function.preg-match]: Unknown modifier 'd' in line
|
на линии
if (preg_match('/.*?'.$img.'\.(png|jpg|jpeg|gif)/is',$image['image'])) {
|
подскажите, пожалуйста, как исправить
весь кусок кода
function magiczoomplus_callback ($matches) {
if (preg_match("/data\/Stick_Gallery/ims",$matches[0])) return $matches[0];//Product Label module support
$plugin = $GLOBALS["magictoolbox"]["magiczoomplus"];
$plugin_enabled = true;
$result = $matches[0];
if(!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*thickbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*fancybox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*lightbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
//!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*cloud\-zoom(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*cloud\-zoom.*?(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*colorbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
!preg_match("/rel\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*colorbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
!preg_match("/rel\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*prettyPhoto\[gallery\](?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0])) {
$plugin_enabled = false;
}
if ($plugin_enabled) {
$shop_dir = str_replace('system/','',DIR_SYSTEM);
$image_dir = str_replace ($shop_dir,'',DIR_IMAGE);
$title = $GLOBALS['magictoolbox']['prods_info']['name'];
$title = htmlspecialchars(htmlspecialchars_decode($title, ENT_QUOTES));
$description = $GLOBALS['magictoolbox']['prods_info']['description'];
$description = htmlspecialchars(htmlspecialchars_decode($description, ENT_QUOTES));
$img = preg_replace("/^.*?href\s*=\s*[\"\'].*\/(.*?)-\d+x\d+.*[\"\'].*$/is","$1",$matches[1]);
$img = preg_replace('/([\(\)\-\+])/is','\\\$1',$img); // REALLY, all escaped now =)
$original_image = false;
if (isset($GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'])) {
foreach ($GLOBALS['magictoolbox']['prods_info']['images'] as $image) {
if (preg_match('/.*?'.$img.'\.(png|jpg|jpeg|gif)/is',$image['image'])) {
$original_image = $image['image'];
}
}
} else {
$original_image = $GLOBALS['magictoolbox']['prods_info']['image'];
}
if (!$original_image) return $matches[0];
$id = $GLOBALS['magictoolbox']['prods_info']['product_id'];
$original_image = $image_dir.$original_image;
$img = getThumb($original_image,'original',$id);
$selector = getThumb($original_image,'selector',$id);
$medium = getThumb($original_image,null,$id);
$thumb = $selector;
if ($plugin->type == 'standard') {
if (!isset($GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'])) {
$additional_result = $plugin->subTemplate(compact('title','img','medium','thumb','id'));
$GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'] = '';// $additional_result;
$thumb = getThumb($original_image,null,$id);
$result = $plugin->template(compact('img','thumb','id','title','description'));
$GLOBALS['magictoolbox']['MagicZoomPlus']['selectors'][] = $additional_result;
$GLOBALS['magictoolbox']['MagicZoomPlus']['main'] = $result;
return 'MAGICTOOLBOX_PLACEHOLDER';
} else {
$result = $plugin->subTemplate(compact('title','img','medium','thumb','id'));
$GLOBALS['magictoolbox']['MagicZoomPlus']['selectors'][] = $result;
return '';
}
} else if ($plugin->type == 'circle') {
if (!isset ($GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'])) {
$result = 'magiczoomplus_MAIN_IMAGE';
$GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'] = $matches[0];
} else {
$result = $matches[0];
}
$GLOBALS['magictoolbox']['items'][] = array('medium' => $medium, 'img' => $thumb);
}
}
return $result;
|
| |
|
|
|
|
|
|
|
для: hitball
(17.10.2013 в 02:21)
| | На первый взгляд в этой строке нет ошибок.
Скорее всего, что-то есть в переменной $img. Скорее всего там есть слеши, а слеш у вас - ограничитель РВ.
Если так, то поможет preg_quote()
if (preg_match('/.*?'.preg_quote($img).'\.(png|jpg|jpeg|gif)/is',$image['image'])) {
|
P.S. лучше в таких случаях заводить новую тему, а не возрождать старую 2ух летней давности. | |
|
|
|
|
|
|
|
для: Sfinks
(17.10.2013 в 09:03)
| | к моему огромному сожалению, не помогло
p.s. тему нашла через поисковик, по-этому и решила здесь разместиться | |
|
|
|
|
|
|
|
для: hitball
(17.10.2013 в 12:39)
| | Выведите перед этой строкой:
echo '<pre>/.*?'.preg_quote($img).'\.(png|jpg|jpeg|gif)/is</pre>';
|
Что получается? | |
|
|
|
|
|
|
|
для: Sfinks
(17.10.2013 в 13:28)
| |
/.*? href\="image/data/activity/chemodan/Trunki\\\-Harley\\\-back\.jpg" title\="Чемодан\\\-каталка Божья Коровка Trunki Harley \\\(Транки Харли\\\)" class\="colorbox" rel\="colorbox"\.(png|jpg|jpeg|gif)/is
Warning: preg_match() [function.preg-match]: Unknown modifier 'd' in Z:\home\11\www\admin\controller\module\magictoolbox\module.php on line 549
|
на странице ведь не только ошибка выдается, но еще и кодировка летит. при чем когда страницу обновляю, то все становится нормально: и кодировка и ошибка исчезает | |
|
|
|
|
|
|
|
для: hitball
(17.10.2013 в 13:38)
| | Хм.... Это правда тот шаблон, который вы ожидали увидеть? Что-то я плохо представляю что им можно проверить..... Ну да ладно. Это отдельная беда. Сейчас о варнинге...
Вы же видите, что слеши не экранированы. Т.е. шаблон у вас кончается вот тут: а я вам давал ссилку на описание функции preg_quote()...
Если его почитать, то можно легко разобраться в чем дело. А именно:
> Функция preg_quote() принимает строку str и добавляет обратный слэш перед каждым служебным символом.
> В регулярных выражениях служебными считаются следующие символы: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
как видите, слеша среди них нет. Но нам надо его также экранировать..... Читаем дальше:
> Функция: string preg_quote ( string $str [, string $delimiter = NULL ] )
> Описание аргументов:
> str: Входная строка.
> delimiter: В случае если указан необязательный параметр delimiter, он будет также экранироваться.
Догадались или нет? | |
|
|
|