2014-11-12 6 views
4

Я wan't создать функцию поиска выделите тег при поиске часть слова с помощью PHPпоиска слов на строку и изменения форматирования

... все слова окрасить

, например, это пример текста:

Текст: Британские регуляторы говорят, что трейдеры использовали частные онлайн-чаты, чтобы координировать свои покупки и продажи, чтобы сменить валютные цены в свою пользу.

при поиске «й» выход будет так:

Текст: Британские регуляторы говорят трейдеры использовали частные интернет-чаты для координации их покупки и продажу переложить цены на валюту в их пользы.

Итак ... Я пробовал этот код ... пожалуйста, помогите мне заполнить его.

Это алгоритм:

$text= "British regulators say..."; 
foreach($word in $text) 
{ 
    if(IS There "th" in $word) 
    { 
     $word2= '<b>'.$word.'</b>' 
     replace($word with word2 and save in $text) 
    } 
} 

, как я могу это на языке PHP?

+0

strpos может помочь вам здесь, если условие выполнено - тогда оберните в сильных тегах - http://php.net/manual/en/function.strpos.php –

+0

Проверьте мой ответ ниже –

+0

Любые из них помогут вам? – AbraCadaver

ответ

2
function highLightWords($string,$find) 
{ 
    return preg_replace('/\b('.$find.'\w+)\b/', "<b>$1</b>", $string); 
} 

Использование:

$string="British regulators say traders used private online chatrooms to coordinate their buying and selling to shift currency prices in their favor."; 
$find="th"; 
print_r(highLightWords($string,$find)); 

Fiddle

Редактировать после вашего комментария:

... Как я могу это сделать для средних символов?например, "линии"

Очень легко, просто обновить шаблон регулярного выражения соответственно

return preg_replace("/\b(\w*$find\w*)\b/", "<b>$1</b>", $string); 

Fiddle

+0

Спасибо :) ... Как я могу сделать это для средних персонажей? например «строка» – user2726957

+0

Это легко. См. Обновленный ответ –

+0

отлично ... он работает .. очень много ... – user2726957

1

Должно быть гораздо проще:

$word = "th"; 
$text = preg_replace("/\b($word.*?)\b/", "<b>$1</b>", $text); 
+0

Большое спасибо :) – user2726957

1

Скажем, много вещей.

Во-первых, как вы знаете PHP это код на стороне сервера, так, до тех пор, как вы не будете возражать против перезагрузки страницы каждый раз, или использовать AJAX ...

Правильный путь я думаю, что будет использовать Javascript для достижения этого.

Это говорит, чтобы взорвать текст вам нужно использовать другую функцию, чтобы быть уверенными, что получается:

Что-то вроде:

$str = "Hello world. It's a beautiful day."; 
$words = explode(" ",$str); 

Теперь слов вара будет содержать разобранную строку.

Теперь вы можете зацикливать и заменить (например), а затем перестроить строку и распечатать ее или сделать другое.

1

Вы можете пойти со следующим кодом

<?php 

    $string = "British regulators say traders used private online chatrooms to coordinate their buying and selling to shift currency prices in their favor"; 

    $keyword = "th"; 
    echo highlightkeyword($string , $keyword); 

    function highlightkeyword($str, $search) { 
     $occurrences = substr_count(strtolower($str), strtolower($search)); 
     $newstring = $str; 
     $match = array(); 

     for ($i=1;$i<$occurrences;$i++) { 
      $match[$i] = stripos($str, $search, $i); 
      $match[$i] = substr($str, $match[$i], strlen($search)); 
      $newstring = str_replace($match[$i], '[#]'.$match[$i].'[@]', strip_tags($newstring)); 
     } 

     $newstring = str_replace('[#]', '<b>', $newstring); 
     $newstring = str_replace('[@]', '</b>', $newstring); 
     return $newstring; 

    } 

    ?> 

Проверить здесь https://eval.in/220395

+0

https://eval.in/220358 –

+0

Да O/p был прав, у них есть отображение в теге 'pre', поэтому жирный шрифт не появлялся –

+0

Спасибо большое, но я хочу, чтобы смело слово ... не является его частью. – user2726957

2

Используйте StrPos(), чтобы найти позицию символа Вы искали .. Затем начните чтение с указанной позиции персонажа до тех пор, пока вы не найдете места.

Смежные вопросы