Foros del Web » Programando para Internet » PHP »

preg_replace con caracteres especiales

Estas en el tema de preg_replace con caracteres especiales en el foro de PHP en Foros del Web. Saludos gente!!! Tengo la siguiente función para reemplazar un keyword por un elance cuando se encuentre en un texto. Todo funciona perfecto salvo dos excepciones, ...
  #1 (permalink)  
Antiguo 31/10/2011, 13:47
 
Fecha de Ingreso: marzo-2007
Mensajes: 8
Antigüedad: 17 años
Puntos: 0
preg_replace con caracteres especiales

Saludos gente!!!

Tengo la siguiente función para reemplazar un keyword por un elance cuando se encuentre en un texto. Todo funciona perfecto salvo dos excepciones, ambas relacionadas con caracteres especiales como á, é, ñ, etc.

Código:
function ($keys,$text) {
$keys=explode("\n", $keywords);

foreach ($keys as $key)
{
  $pat='/([\w\W]*?)\|([\w\W]*)/';
  if(preg_match_all($pat,$key,$matches,PREG_SET_ORDER))
   {
    foreach ($matches as $match) 
     {
         $link=$match[2];
         $keyword=$match[1];
         $replace='<a href="'.$link.'" title="'.$keyword.'">'.$keyword.'</a>';
         $case="i";
         $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. $keyword .'\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'s'. $case;				 
         $text = preg_replace($regEx,$replace,$text,1);
    }
   }
}
}
Por ejemplo, si ejecuto esta función con $keys:

Código:
$keys = "ATR|http:://www.unenlace.com\nÍndice|http://wwww.otroenlace.com";
Índice no es reemplazado nunca, no funciona si la primera letra lleva tilde o es ñ, aunque sí funciona si la tilde o la ñ está en medio de la palabra.

Con la palabra ATR todo funciona perfectamente aunque con algunos detalles, si en el texto está la palabra "atrás" es reemplazada por "ATRás" (con el enlace), esto no ocurre si escribo "atras" (sin tilde).

He buscado en internet cosas de preg_replace y problemas que tiene con UTF-8 pero no logro arreglar esto. (he probado con el modificador "u" y no funciona, el archivo donde está el script está en UTF-8 y la base de datos de donde saco el texto a pasar a la función también está en UTF-8).
  #2 (permalink)  
Antiguo 31/10/2011, 13:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: preg_replace con caracteres especiales

Debes usar el correspondiente de caracteres en latín \pL y eso viene explicado en el manual, por favor consultalo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 31/10/2011, 15:25
 
Fecha de Ingreso: marzo-2007
Mensajes: 8
Antigüedad: 17 años
Puntos: 0
Respuesta: preg_replace con caracteres especiales

Si mi regex es:

Código:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. $keyword .'\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'si';
¿Donde pongo \pL? He intentado varias opciones hasta donde llega mis conocimientos pero sin éxito.

P.D.: Donde está el manual al que te refieres?

Etiquetas: caracteres, especiales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:36.