You are here: php » highlight search results with php
Highlight search results with PHP
- Written By
- PHPin24
- Submitted At
- 2009-08-02 19:11:32
- Num Views
- 563
- Category
- PHP
|
If you're looking for a PHP function to highlight your search results then you've probably tried a normal string replace, but the problem with that is that it breaks the links and images if they contain the text you are looking for. So what you need to do is a regular expression that ignores text in links and image names. Here it is: <? /** * Perform a simple text replace * This should be used when the string does not contain HTML * (off by default) */ define('STR_HIGHLIGHT_SIMPLE', 1); /** * Only match whole words in the string * (off by default) */ define('STR_HIGHLIGHT_WHOLEWD', 2); /** * Case sensitive matching * (off by default) */ define('STR_HIGHLIGHT_CASESENS', 4); /** * Overwrite links if matched * This should be used when the replacement string is a link * (off by default) */ define('STR_HIGHLIGHT_STRIPLINKS', 8); /** * Highlight a string in text without corrupting HTML tags * * @author Aidan Lister * @version 3.1.1 * @link http://aidanlister.com/repos/v/function.str_highlight.php * @param string $text Haystack - The text to search * @param array|string $needle Needle - The string to highlight * @param bool $options Bitwise set of options * @param array $highlight Replacement string * @return Text with needle highlighted */ function str_highlight($text, $needle, $options = null, $highlight = null) { // Default highlighting if ($highlight === null) { $highlight = '<span class="highlight">$1</span>'; } // Select pattern to use if ($options & STR_HIGHLIGHT_SIMPLE) { $pattern = '#(%s)#'; $sl_pattern = '#(%s)#'; } else { $pattern = '#(?!<.*?)(%s)(?![^<>]*?>)#'; $sl_pattern = '#(%s)#'; } // Case sensitivity if (!($options & STR_HIGHLIGHT_CASESENS)) { $pattern .= 'i'; $sl_pattern .= 'i'; } $needle = (array) $needle; foreach ($needle as $needle_s) { $needle_s = preg_quote($needle_s); // Escape needle with optional whole word check if ($options & STR_HIGHLIGHT_WHOLEWD) { $needle_s = 'b' . $needle_s . 'b'; } // Strip links if ($options & STR_HIGHLIGHT_STRIPLINKS) { $sl_regex = sprintf($sl_pattern, $needle_s); $text = preg_replace($sl_regex, '1', $text); } $regex = sprintf($pattern, $needle_s); $text = preg_replace($regex, $highlight, $text); } return $text; } ?> You can call the function like this: echo str_highlight($searched_title, $search_keyword); You can find the original article here: Hightlight search results function By PHPin24 @ 2009-08-02 19:11:32
|
