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 :: функции str_replace и str_ireplace не пойму в чем дело

 PHP.SU

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


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

> Без описания
KonstantinK
Отправлено: 16 Ноября, 2010 - 19:08:59
Post Id



Новичок


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


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




Подскажите, пишу маленькую простенькую функцию которая подсвечивает ключевые слова поиска заданные в форме. Вот код функции.
PHP:
скопировать код в буфер обмена
  1. function Allocation_Word($input, $sheet)
  2.     {
  3.         //разделяем переданные пост значения в массив
  4.        
  5.        
  6.             $array_word = explode(',', $input);
  7.             $array_word = array_map("trim", $array_word);
  8.  
  9.            // производим поиск и замену
  10.             for($i = 0; $i < count($array_word); $i++)
  11.             {
  12.                 $sheet = str_ireplace($array_word[$i], '<span style="background:#FF0000">' . $array_word[$i] . '</span>', $sheet);
  13.                
  14.             }
  15.          
  16.         return $sheet;
  17.     }

В функцию подставляю переменную пост переданную из формы и второй параметр это страница в которой производится поиск и замена. Все бы ничего но почему то нет никакой разницы какую применять функцию str_replace() или str_ireplace() и находит только точное совпадение главное не получается сделать поиск без учета регистра.
В чем тут может быть дело?

(Отредактировано автором: 16 Ноября, 2010 - 19:15:18)

 
 Top
Okula
Отправлено: 16 Ноября, 2010 - 20:35:27
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




Так попробуй:
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace("/(".preg_quote($array_word[$i]).")/iu", "<span style='background:#FF0000'>\\1</span>", $text);

Должно работать
 
 Top
OrmaJever Модератор
Отправлено: 16 Ноября, 2010 - 20:46:10
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




а какие параметры в функцию передаёте?

(Отредактировано автором: 16 Ноября, 2010 - 20:46:27)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
JustUserR
Отправлено: 16 Ноября, 2010 - 21:13:54
Post Id



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


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


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




KonstantinK пишет:
Находит только точное совпадение главное не получается сделать поиск без учета регистра.
Для проведения анализа строковой переменной без учета регистра входящих символов необходимо использование значения правильной кодовой таблицы для внутреннего представления элементов - дело в том что обеспечение сравнения входящих элементов с учетом эквивалентности по регистру символов необходимо осуществлять учет их сопоставлений в текущей кодировке


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



Новичок


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


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




JustUserR
Цитата:
Для проведения анализа строковой переменной без учета регистра входящих символов необходимо использование значения правильной кодовой таблицы для внутреннего представления элементов - дело в том что обеспечение сравнения входящих элементов с учетом эквивалентности по регистру символов необходимо осуществлять учет их сопоставлений в текущей кодировке


Так и что же делать?

OrmaJever
Цитата:
а какие параметры в функцию передаёте?

вот так это выглядит

PHP:
скопировать код в буфер обмена
  1.  $sheet = file_get_contents('./first.tpl');
  2.        
  3.    $a = Allocation_Word($_POST['word'], $sheet);
  4.  


Okula Спасибо хотел без регулярки попробовать, но видимо не получится.
 
 Top
Okula
Отправлено: 16 Ноября, 2010 - 23:07:05
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




Не нужно избегать регулярок, они очень упрощают жизнь))))
 
 Top
KonstantinK
Отправлено: 16 Ноября, 2010 - 23:22:37
Post Id



Новичок


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


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




Okula Да я и не собирался, но хотел сначала разобраться с более простыми функциями позволяющими делать поиск и замену.
 
 Top
OrmaJever Модератор
Отправлено: 16 Ноября, 2010 - 23:26:36
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




str_ireplace() первым парметром может принимать масив.
PHP:
скопировать код в буфер обмена
  1. function Allocation_Word($input, $sheet)
  2.     {
  3.         //разделяем переданные пост значения в массив
  4.        
  5.        
  6.             $array_word = explode(',', $input);
  7.             $array_word = array_map("trim", $array_word);
  8.  
  9.            // производим поиск и замену
  10.                 $sheet = str_ireplace($array_word, '<span style="background:#FF0000">' . $array_word . '</span>', $sheet);              
  11.          
  12.         return $sheet;
  13.     }

и всё должно работать


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
KonstantinK
Отправлено: 17 Ноября, 2010 - 11:45:15
Post Id



Новичок


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


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




OrmaJever Не так не работает - теперь на месте найденного вставляет выделенное слово Array и кстати тоже регистрозависимо

(Отредактировано автором: 17 Ноября, 2010 - 11:45:55)

 
 Top
OrmaJever Модератор
Отправлено: 17 Ноября, 2010 - 12:53:26
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Были похожее темы. Попробуйте установить рускую локаль. setlocale()

(Отредактировано автором: 17 Ноября, 2010 - 12:54:20)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
KonstantinK
Отправлено: 17 Ноября, 2010 - 17:56:51
Post Id



Новичок


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


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




Да ладно в принципе на регулярке сделал щас до ума доведу, спасибо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB