Project

General

Profile

« Previous | Next » 

Revision 1171

Added by Ruud about 15 years ago

fixed breaking droplets by highlighting search-words in search result pages.

View differences:

frontend.functions.php
101 101
	$string = str_replace($string_ul_umlaut, $string_ul_regex, $search_string);
102 102
	// the highlighting
103 103
	// match $string, but not inside <style>...</style>, <script>...</script>, <!--...--> or HTML-Tags
104
	// Also droplet tags are now excluded from highlighting.
104 105
	// split $string into pieces - "cut away" styles, scripts, comments, HTML-tags and eMail-addresses
105 106
	// we have to cut <pre> and <code> as well.
106 107
	// for HTML-Tags use <(?:[^<]|<.*>)*> which will match strings like <input ... value="<b>value</b>" >
107
	$matches = preg_split("~(<style.*</style>|<script.*</script>|<pre.*</pre>|<code.*</code>|<!--.*-->|<(?:[^<]|<.*>)*>|\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}\b)~iUs",$foo,-1,(PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));

108
	$matches = preg_split("~(\[\[.*\]\]|<style.*</style>|<script.*</script>|<pre.*</pre>|<code.*</code>|<!--.*-->|<(?:[^<]|<.*>)*>|\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}\b)~iUs",$foo,-1,(PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));
108 109
	if(is_array($matches) && $matches != array()) {
109 110
		$foo = "";
110 111
		foreach($matches as $match) {
111
			if($match{0}!="<" && !preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}$/i', $match)) {

112
			if($match{0}!="<" && !preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}$/i', $match) && !preg_match('~\[\[.*\]\]~', $match)) {
112 113
				$match = str_replace(array('&lt;', '&gt;', '&amp;', '&quot;', '&#039;', '&nbsp;'), array('<', '>', '&', '"', '\'', "\xC2\xA0"), $match);
113 114
				$match = preg_replace('~('.$string.')~ui', '_span class=_highlight__$1_/span_',$match);
114 115
				$match = str_replace(array('&', '<', '>', '"', '\'', "\xC2\xA0"), array('&amp;', '&lt;', '&gt;', '&quot;', '&#039;', '&nbsp;'), $match);

Also available in: Unified diff