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
Форумы портала PHP.SU :: Версия для печати :: Не срабатывает шаблон
Форумы портала PHP.SU » PHP » Регулярные выражения » Не срабатывает шаблон

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

1. cuprum - 19 Июня, 2010 - 22:23:45 - перейти к сообщению
есть код, выполняет поиск и замену
PHP:
скопировать код в буфер обмена
  1.  
  2. $out="somethinf else";//на что менять
  3. $in="something";//что искать
  4. $out=trim($out);
  5. $in=addslashes(trim($in));
  6. $pattern="#$in#";
  7. $result=preg_replace ($pattern, $out, $text, 1);//$text string from some file
  8. $result=stripslashes($result);
  9. echo $result;
  10.  

работает все ок.
Но если в $in есть хтмл теги(ссылка an example), то ничего не меняется.
WTF?
help pls
thx
2. JustUserR - 20 Июня, 2010 - 13:28:59 - перейти к сообщению
cuprum пишет:
Но если в $in есть хтмл теги(ссылка an example), то ничего не меняется
Если значение заменяемого шаблона подставляется динамически то он может содержать символы являющиеся управляемыми с точки зрения машины регулярных выражений - и соответственнно их нужно предварительно заэкранировать причем не функцией addslahes поскольку для нее часть символов является обычными - а заменой типа str_replace с условием замены "<" на "\\<" и ">" на "\\>" соответственно
Также проверьте кодировку входящих данных - поскольку строковые функции чувствительны к ней
3. cuprum - 20 Июня, 2010 - 15:29:14 - перейти к сообщению
данные приходят с post запроса.
Применил str_replace работает. благодарю.

Всегда считал, что addslashes нормально экранирует.
4. JustUserR - 21 Июня, 2010 - 12:40:11 - перейти к сообщению
cuprum пишет:
Применил str_replace работает. благодарю.
Всегда считал, что addslashes нормально экранирует.
На здоровье Функция addslashes нормально экраниует в плане управляющих символов в строках с двойными кавычками - то есть если у вас есть строка с определенным уровнем экранирования то данная функция добавляет еще один уровень - причем в отличие от шифрования подразумается что после того как некий парсер обработает строку и сделать правильную трактовку заэкранированных символов - то один уровень как раз будет снят С точки зрения обычной строки с двойными кавычкам символы типа точки и различных скобок и многие другие не являются управляющими - а вот с точки зрения регулярных выражений являются - именно поэтому нужно провоить экранировку с точки зрения регулярных выражений которая по отношению к обычным строкам является шифрованием

 

Powered by ExBB FM 1.0 RC1