Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: str_replace Заглавные буквы
 
 автор: nekifrovv   (24.01.2010 в 16:04)   письмо автору
 
 

$my_string=str_replace("$word","<b>$word</b>","$my_string") ;

Делаю поиск по сайту, надо чтобы фраза, которая учавствует в поиске выделялась жирным шрифтом, но есть пробелма, как быть с заглавными буквами?
Надо чтобы слова с заглавными буквами в результате поиска тоже выделялись жирным шрифтом. как быть?

Пробовал
$my_string=preg_replace("/($word)/i","<b>$word</b>","$my_string") ;
На моем хостинге не работает (

  Ответить  
 
 автор: t3ma   (24.01.2010 в 16:29)   письмо автору
 
   для: nekifrovv   (24.01.2010 в 16:04)
 

что содержится в $word ? это массив или что ?

вообще правильнее делать так
<?php
$my_string 
preg_replace("/(".$word.")/i""<b>".$word."</b>"$my_string);
?>

  Ответить  
 
 автор: Nekifrovv   (24.01.2010 в 17:26)   письмо автору
 
   для: t3ma   (24.01.2010 в 16:29)
 

$word - это слово которое набрали в поисковике. Не массив.

Почемуто preg_replace хорошо работает с Английскими буквами, а вот с русскими не хочет того же выполнять!

  Ответить  
 
 автор: Nekifrovv   (24.01.2010 в 17:34)   письмо автору
 
   для: t3ma   (24.01.2010 в 16:29)
 

Пример с русскими символами не работает (

  Ответить  
 
 автор: neadekvat   (24.01.2010 в 17:38)   письмо автору
 
   для: nekifrovv   (24.01.2010 в 16:04)
 

<?php
   $word 
'Заголовок';
   
$my_string "Вы искали {$word}, с чем вас и поздравляем";
   
$my_string str_replace($word"<b>" $word "</b>"$my_string) ;
   echo 
$my_string;

Я вас, наверное, удивлю, но у меня все работает.

  Ответить  
 
 автор: Nekifrovv   (24.01.2010 в 17:53)   письмо автору
 
   для: neadekvat   (24.01.2010 в 17:38)
 

<?
$my_string = "Привет мир";
$word = "прив";
$my_string = preg_replace("/(".$word.")/i", "<b>".$word."</b>", $my_string);
echo $my_string;
?>

Существует какойто текст, где есть обычные и заглавные буквы $my_string
Существует слово написанное маленькими буквами

Надо чтобы в результате, в тексте, в котором содержатся и большие и маленькие буквы, вне зависимости от того какие они большие или маленькие - $word = "прив"; но вот эти, были выделены жирным шрифтом.

А то что это работает, я не удивлен!

  Ответить  
 
 автор: DEM   (24.01.2010 в 20:02)   письмо автору
 
   для: Nekifrovv   (24.01.2010 в 17:53)
 

str_ireplace();
работает так же, но не смотрит на регистр

  Ответить  
 
 автор: Nekifrovv   (24.01.2010 в 21:58)   письмо автору
 
   для: DEM   (24.01.2010 в 20:02)
 

<?
$my_string 
"Hellow world";
$word "hel";
$my_string=str_ireplace("$word","<b>$word</b>","$my_string") ;
echo 
$my_string;
?>
Работает

<?
$my_string 
"Привет мир";
$word "пр";
$my_string=str_ireplace("$word","<b>$word</b>","$my_string") ;
echo 
$my_string;
?>
Не работает

В чем интересно могут быть причины, в хостинге?

  Ответить  
 
 автор: neadekvat   (24.01.2010 в 22:03)   письмо автору
 
   для: Nekifrovv   (24.01.2010 в 21:58)
 

У меня работает.
Попробуйте локаль выставить
setlocale(LC_ALL, 'ru_RU');

  Ответить  
 
 автор: Nekifrovv   (24.01.2010 в 22:16)   письмо автору
 
   для: neadekvat   (24.01.2010 в 22:03)
 

Ты гений! спасибо! )

Я еще, не знаете, случайно, как сделать, чтобы результат с выделенным текстом был в таком же регистре как и в результате поиска, а не в запросе?

т. е. , чтобы после вот этого:

<?
setlocale
(LC_ALL'ru_RU');
$my_string "Привет мир";
$word "пр";
$my_string=str_ireplace("$word","<b>$word</b>","$my_string") ;
echo 
$my_string;
?>
Было не "привет мир", а "Привет мир"

  Ответить  
 
 автор: Nekifrovv   (25.01.2010 в 10:23)   письмо автору
 
   для: Nekifrovv   (24.01.2010 в 22:16)
 

И еще прикол, есть некоторые слова, на которые это не действует ) Например у меня все работает на "Привет мир", а на слово "Электронный" не работает )


<?
setlocale
(LC_ALL'ru_RU');
$my_string "Электронный";
$word "эл";
$my_string=str_ireplace("$word","<b>$word</b>","$my_string") ;
echo 
$my_string;
?> 

  Ответить  
 
 автор: Николай2357   (25.01.2010 в 13:25)   письмо автору
 
   для: Nekifrovv   (25.01.2010 в 10:23)
 

Где то здесь уже разбирали подобное. Вот так можно:
<?php

$text 
'Надо чтобы слова с заглавными буквами в результате поиска тоже выделялись жирным шрифтом. как быть? 
И еще прикол, есть некоторые слова, на которые это не действует ) 
Например у меня все работает на "Привет мир", а на слово "Электронный" не работает '
;  
$pattern "надо чтобы слова эл"

function 
parser($text$pattern

    
$arr explode(" "$pattern); 

        if(
preg_match_all('#('.implode('|'array_map('preg_quote'$arr)).')#ius'$text$outPREG_OFFSET_CAPTURE)) 
        {  
        
$result ''
        
$src 0;         
            foreach(
$out[0] as $value)   
            {               
                if(
$value[1] > $src)   
                
$result .= substr($text$src$value[1] - $src);  
              
            
$src $value[1] + mb_strlen($value[0]);   
            
$result .= '<b style="background-color:#FFFF00">'.$value[0].'</b>';   
            } 
        
$result .= substr($text$src);                         
        }     

return 
$result


echo 
parser($text$pattern);

  Ответить  
 
 автор: Nekifrovv   (25.01.2010 в 23:13)   письмо автору
 
   для: Николай2357   (25.01.2010 в 13:25)
 

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: invalid UTF-8 string at offset 2 in test2.php on line 12

  Ответить  
 
 автор: Trianon   (25.01.2010 в 23:26)   письмо автору
 
   для: Nekifrovv   (25.01.2010 в 23:13)
 

скрипт-то сам в utf-8 ?

  Ответить  
 
 автор: Nekifrovv   (25.01.2010 в 23:41)   письмо автору
 
   для: Trianon   (25.01.2010 в 23:26)
 

Мои нет, этот похоже да (

  Ответить  
 
 автор: Николай2357   (25.01.2010 в 23:54)   письмо автору
 
   для: Nekifrovv   (25.01.2010 в 23:41)
 

Ну дык в чем проблема то? Всего две строчки исправить. Убрать модификатор u в preg_match_all и mb_strlen заменить на strlen...
А лучше кодировку сменить)))

  Ответить  
 
 автор: Nekifrovv   (26.01.2010 в 00:08)   письмо автору
 
   для: Николай2357   (25.01.2010 в 23:54)
 

Спасиб, есть контакт, но прикол в том, что на слово "электронный" опять не работает ) Т.е. если ищем "эл" в "Электронный" то ничего не выделится... ) Может впринципе быть в кодировке дело ?:)

  Ответить  
 
 автор: Trianon   (26.01.2010 в 00:27)   письмо автору
 
   для: Nekifrovv   (26.01.2010 в 00:08)
 

локаль-то у Вас какая?
ru-ru.cp1251 или ru-ru.koi-8r ?

  Ответить  
 
 автор: Nekifrovv   (26.01.2010 в 12:32)   письмо автору
 
   для: Trianon   (26.01.2010 в 00:27)
 

Локаль пробовал вставить
setlocale(LC_ALL, 'ru_RU');
setlocale(LC_ALL, "ru-ru.koi-8r");
setlocale(LC_ALL, "ru_RU.CP1251", "Russian_Russia.1251");
по очереди - результат один. Все кроме слова "Электронный"

Попробовал на русском хостинге без локалей - все ок работает.

  Ответить  
 
 автор: Николай2357   (25.01.2010 в 23:32)   письмо автору
 
   для: Nekifrovv   (25.01.2010 в 23:13)
 

Necessary to use true charset

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования