Pues seguramente no sepa explicarme bien xD
Cuando se crea un Tema en el foro (igual que aquí), el contenido del mensaje se guarda en la BD como html
En la variable
$post_message está ese contenido, por ejemplo:
HTML:
<img src="http://i67.tinypic.com/157ep8h.jpg" border="0" /><br />
<br />
Título original: Get Over It<br />
Año: 2001<br />
País: Estados Unidos<br />
Director: Tommy O´Haver<br />
Guion: R. Lee Fleming Jr.<br />
<br />
Género: Comedia, Romance, Comedia romántica, Adolescencia<br />
<br />
Reparto: Kirsten Dunst, Ben Foster, Sisqó, Martin Short, Melissa Sagemiller, Shane West, Colin Hanks, Swoosie Kurtz, Carmen Electra, Ed Begley Jr., Zoe Saldana, Mila Kunis, Christopher Jacot<br />
<br />
Sinopsis<br />
Comedia interpretada por Ben Foster en el papel de un joven que intentará cualquier cosa para recuperar a su ex-novia, Allison (Melissa Sagemiller), que le acaba de dejar; se apuntará a una academia, representará un musical, e intentará triunfar para conquistarla de nuevo.<br />
El plugin extrae los géneros y los reemplaza cuando se carga la página
PHP:
preg_match('|Género(.*?)<br />|is', $post_message, $gen); //extraemos los géneros
$quitar = array(": ",":",".",", ");
$poner = array("","",",",",");
$generos = str_replace($quitar, $poner, $gen[1]); //si hay puntos los cambiamos pos comas y quitamos los espacios
$genero = explode(',', $generos);
//A continuación hice un for para reemplazarlos
$cuenta = count($genero);
for ($i = 0; $i < $cuenta; $i++){
$post_message = str_replace($genero[$i], '<a href="recopilaciones.php?gen='.$genero[$i].'">'.$genero[$i].'</a>', $post_message);
}
En este ejemplo hay 4 géneros (Comedia,Romance,Comedia romántica,Adolescencia)
str_replace reemplaza todas las ocurrencias siguiendo el orden que están los array, en primer lugar reemplaza Comedia en las
3 ocurrencias que hay en el post, luego Romance, Comedia romántica no la encuentra porque ya ha sido reemplazada la palabra Comedia, y por último Adolescencia
Lo que necesito es que solo reemplace la primera ocurrencia y no todas las que encuentra, he probado con
preg_replace que sí tiene el parámetro
limit pero no he sabido hacerlo funcionar
Seguramente todo eso se puede hacer de otra forma, pero es como se me ocurrió xD
Un saludo y gracias
😉
- - - Actualizado - - -
Ya está solucionado, :sonrisaabierta:
He usado preg_split en vez de explode, así:
PHP:
$genero = preg_split('/,/', $generos);
Y en vez de usar str_replace he usado preg_replace con límite 1
PHP:
$post_message = str_replace('/'.$genero[$i].'/', '<a href="recopilaciones.php?gen='.$genero[$i].'">'.$genero[$i].'</a>', $post_message, 1);
Ahora solo reemplaza la primera coincidencia que encuentra de cada género, y es justo lo que necesitaba
Muchas gracias a todos
Un saludo
🙂