PHP: обернуть (все) иглу с html-элементом в стоге сена - PullRequest
0 голосов
/ 26 ноября 2011

для моей функции автозаполнения мне нужно раскрасить выдержки в предложениях ... так что ...

, если я ищу что-то вроде "sa", советчик дает мне следующее:

Samsung satire sata e-sata ...

Теперь, что бы я хотел от своей функции, это чтобы она подсвечивалась - оборачивает стрелку "sa" (все окраски) и желаемый тег html.

как Sa msung sa шина sa ta e- sa ta

  • Должно быть utf8 безопасно
  • Он должен сохранять заглавные буквы
  • Он должен игнорировать HTML

На сайте PHP я нашел функцию, которая выполняет замену и сохраняет заглавные буквы ... Я изменил ее так, чтобы онаutf8 friendly ...

function ext_str_ireplace($findme, $replacewith, $text) { 
    // Replaces $findme in $subject with $replacewith 
    // Ignores the case and do keep the original capitalization by using $1 in $replacewith 
    // Required: PHP 5 

    $rest = $text; 

    $result = ''; 

    while (mb_stripos($rest, $findme) !== false) { 
      $pos = mb_stripos($rest, $findme); 

      // Remove the wanted string from $rest and append it to $result 
      $result .= mb_substr($rest, 0, $pos); 
      $rest = mb_substr($rest, $pos, mb_strlen($rest)-$pos); 

      // Remove the wanted string from $rest and place it correctly into $result 
      $result .= mb_ereg_replace('$1', mb_substr($rest, 0, mb_strlen($findme)), $replacewith); 
      $rest = mb_substr($rest, mb_strlen($findme), mb_strlen($rest)-mb_strlen($findme)); 
    } 

    // After the last match, append the rest 
    $result .= $rest; 

    return $result; 
} 

Он прекрасно работает ... как

ext_str_ireplace("sa", "<b>sa</b>", "Samsung");

пока я не передам в него HTML-код

$text= '<p class="red">A client is an application or system that accesses a service made available by a server. </p>';
ext_str_ireplace("cl", "<b>cl</b>", $text);

конечнофункция заменит строку "cl" в "

1 Ответ

2 голосов
/ 26 ноября 2011
   function keywords($text, $words)
    {
        if (sizeof($words) == 1)
        {
            $expression = preg_quote($words[0]);
        }
        else
        {
            foreach ($words as $key => $word)
            {
                $words[$key] = preg_quote($word);
            }
            $expression = implode('|', $words);
        }   
        return preg_replace('/('.$expression.')(?=[^>]*(<|$))/iu', '<strong>$1</strong>', $text);
    }

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

keywords('Samsung', array('sa', 'ng'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...