Revision: 6793
Updated Code
at June 17, 2008 19:31 by pateketrueke
Updated Code
/**
* (contexto[, busqueda[, reemplazo[, ordinal]]])
*
* Resalta palabras dentro de una cadena de texto.
*/
function search($text, $find, $repl = '<strong>\\1</strong>', $ord = 32)
{
global $tags, $num;
$num = 0; // contador
$tags = array(); // pila
$char = is_numeric($ord)?
chr($ord): $ord[0]; // caracter?
if (!function_exists('_search_backup_tags'))
{ // guardamos el HTML
function _search_backup_tags($test)
{
global $tags, $num;
// guardamos el tag completo
$tags[$num] = $test[0];
$tag = "<!$num>";
$num++; // pisa y corre!
return $tag;
}
}
if (!function_exists('_search_restore_tags'))
{ // recuperamos el HTML
function _search_restore_tags($test)
{
global $tags; // xD
return $tags[$test[1]];
}
}
$text = // escapamos tags tipo HTML/BBCode
preg_replace_callback('/([<\[][^>\]]+\/?[\]>])/', '_search_backup_tags', $text);
// ----------------------------- Resaltamos!
$found = array();
$word = // separamos en palabras?
explode($char, $find);
foreach ($word as $test)
{ // Escapamos las "wildcards"
$found[] = preg_quote(strip_tags($test));
}
$expr = join('|', $found); // unimos
$text = // Aqui ocurre toda la magia....
preg_replace("/($expr)/is", $repl, $text);
// recuperamos etiquetas HTML/BBCode
$text = preg_replace_callback('/<!(\d+)>/', '_search_restore_tags', $text);
return $text;
}
Revision: 6792
Updated Code
at June 17, 2008 19:15 by pateketrueke
Updated Code
/**
* (contexto[, busqueda[, reemplazo[, ordinal]]])
*
* Resalta/Reemplaza palabras dentro de una cadena de texto.
*/
function search($text, $find, $repl = '<strong>\\1</strong>', $ord = 32)
{
global $tags, $num;
$num = 0; // contador
$tags = array(); // pila
$char = is_numeric($ord)?
chr($ord): $ord[0]; // caracter?
if (!function_exists('_search_backup_tags'))
{ // guardamos el HTML
function _search_backup_tags($test)
{
global $tags, $num;
// guardamos el tag completo
$tags[$num] = $test[0];
$tag = "<!$num>";
$num++; // pisa y corre!
return $tag;
}
}
if (!function_exists('_search_restore_tags'))
{ // recuperamos el HTML
function _search_restore_tags($test)
{
global $tags; // xD
return $tags[$test[1]];
}
}
$text = // escapamos tags tipo HTML/BBCode
preg_replace_callback('/([<\[][^>\]]+\/?[\]>])/', '_search_backup_tags', $text);
if (is_array($find) || is_array($repl))
{ // Reemplazo habitual...
$text = preg_replace($find, $repl, $text);
}
else
{ // ----------------------------- Resaltamos!
$found = array();
$word = // separamos en palabras?
explode($char, $find);
foreach ($word as $test)
{ // Escapamos las "wildcards"
$found[] = preg_quote(strip_tags($test));
}
$expr = join('|', $found); // unimos
$text = // Aqui ocurre toda la magia....
preg_replace("/($expr)/is", $repl, $text);
}
// recuperamos etiquetas HTML/BBCode
$text = preg_replace_callback('/<!(\d+)>/', '_search_restore_tags', $text);
return $text;
}
Revision: 6791
Updated Code
at June 17, 2008 19:13 by pateketrueke
Updated Code
/**
* (contexto[, busqueda[, reemplazo[, ordinal]]])
*
* Resalta palabras dentro de una cadena de texto.
*/
function search($text, $find, $repl = '<strong>\\1</strong>', $ord = 32)
{
global $tags, $num;
$num = 0; // contador
$tags = array(); // pila
$char = is_numeric($ord)?
chr($ord): $ord[0]; // caracter?
if (!function_exists('_search_backup_tags'))
{ // guardamos el HTML
function _search_backup_tags($test)
{
global $tags, $num;
// guardamos el tag completo
$tags[$num] = $test[0];
$tag = "<!$num>";
$num++; // pisa y corre!
return $tag;
}
}
if (!function_exists('_search_restore_tags'))
{ // recuperamos el HTML
function _search_restore_tags($test)
{
global $tags; // xD
return $tags[$test[1]];
}
}
$text = // escapamos tags tipo HTML/BBCode
preg_replace_callback('/([<\[][^>\]]+\/?[\]>])/', '_search_backup_tags', $text);
if (is_array($find) || is_array($repl))
{ // Reemplazo habitual...
$text = preg_replace($find, $repl, $text);
}
else
{ // ----------------------------- Resaltamos!
$found = array();
$word = // separamos en palabras?
explode($char, $find);
foreach ($word as $test)
{ // Escapamos las "wildcards"
$found[] = preg_quote(strip_tags($test));
}
$expr = join('|', $found); // unimos
$text = // Aqui ocurre toda la magia....
preg_replace("/($expr)/is", $repl, $text);
}
// recuperamos etiquetas HTML/BBCode
$text = preg_replace_callback('/<!(\d+)>/', '_search_restore_tags', $text);
return $text;
}
Revision: 6790
Updated Code
at June 17, 2008 19:12 by pateketrueke
Updated Code
/**
* (contexto[, busqueda[, reemplazo[, ordinal]]])
*
* Resalta palabras dentro de una cadena de texto.
*/
function search($text, $find, $repl = '<strong>\\1</strong>', $ord = 32)
{
global $tags, $num;
$num = 0; // contador
$tags = array(); // pila
$char = is_numeric($ord)?
chr($ord): $ord[0]; // caracter?
if (!function_exists('_search_backup_tags'))
{ // guardamos el HTML
function _search_backup_tags($test)
{
global $tags, $num;
// guardamos el tag completo
$tags[$num] = $test[0];
$tag = "<!$num>";
$num++; // pisa y corre!
return $tag;
}
}
if (!function_exists('_search_restore_tags'))
{ // recuperamos el HTML
function _search_restore_tags($test)
{
global $tags; // xD
return $tags[$test[1]];
}
}
$text = // escapamos tags tipo HTML/BBCode
preg_replace_callback('/([<\[][^>\]]+\/?[\]>])/', '_search_backup_tags', $text);
if (is_array($find) || is_array($repl))
{ // Reemplazo habitual...
$text = preg_replace($find, $repl, $text);
}
else
{ // ----------------------------- Resaltamos!
$found = array();
$word = // separamos en palabras?
explode($char, $find);
foreach ($word as $test)
{ // Escapamos las "wildcards"
$found[] = preq(strip_tags($test));
}
$expr = join('|', $found); // unimos
$text = // Aqui ocurre toda la magia....
preg_replace("/($expr)/is", $repl, $text);
}
// recuperamos etiquetas HTML/BBCode
$text = preg_replace_callback('/<!(\d+)>/', '_search_restore_tags', $text);
return $text;
}
Revision: 6789
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 14, 2008 13:14 by pateketrueke
Initial Code
function search($text, $find, $ord = 32, $repl = '<strong>\\1</strong>')
{
global $tags, $num;
$num = 0; // counter!
$tags = array(); // stack
$char = is_numeric($ord)?
chr($ord): $ord[0]; // char, separator
if (!function_exists('_search_backup_tags'))
{ // backup tags?
function _search_backup_tags($test)
{
global $tags, $num;
// saved the full tag!
$tags[$num] = $test[0];
$tag = "<!$num>";
$num++; // OK
return $tag;
}
}
if (!function_exists('_search_restore_tags'))
{ // restore the backup
function _search_restore_tags($test)
{
global $tags; // xD
return $tags[$test[1]];
}
}
$text = // escape tags "expression"
preg_replace_callback('/([<\[][^>\]]+\/?[\]>])/', '_search_backup_tags', $text);
// ----------------------------- Search highlight!
$found = array();
$word = // get the words
explode($char, $find);
foreach ($word as $test)
{ // escape "wildcards"
$found[] = preg_quote(strip_tags($test));
}
$expr = join('|', $found); // cool
$text = // Magix happens there
preg_replace("/($expr)/is", $repl, $text);
// restore with the backup handler
$text = preg_replace_callback('/<!(\d+)>/', '_search_restore_tags', $text);
return $text;
}
Initial URL
Initial Description
Initial Title
Highlight within HTML/BBCode without source breaking
Initial Tags
php, html, replace
Initial Language
PHP