Je m'arrache les cheveux depuis hier soir sur une boucle foreach sensé remplacer des morceaux de texte.
Pour faire simple, il s'agit de remplacer du code html/php/js qui aurait été posté dans un texte par leur affichage 'en clair dans une citation (un peu comme ici lorsque l'on utilise les balises).
$textes = $data[contenu];
$marqueurDebut = '<citation>';
$debut = strpos( $textes, $marqueurDebut ) + strlen( $marqueurDebut );
$marqueurFin = '</citation>';
$fin = strpos( $textes, $marqueurFin ) ;
$citation = preg_match_all ($marqueurFin, $textes, $matches, PREG_OFFSET_CAPTURE);
if (preg_match($marqueurDebut, $textes)){
$text = substr( $textes, $debut, $fin - $debut);
$texthtml = htmlspecialchars($text);
$cite = str_replace( "$text", "$texthtml", $data[contenu]);
echo nl2br($cite);
}
else {
$data[contenu] = nl2br($data[contenu]);
echo $data[contenu];
}
Ce code fonctionne très bien lorsqu'il n'y a qu'une seule occurrence à remplacer et c'est donc ici que j'ai voulu utiliser foreach : $textes = $data[contenu];
$marqueurDebutLien = '<citation>';
$debutLien = strpos( $data[contenu], $marqueurDebutLien ) + strlen( $marqueurDebutLien );
$marqueurFinLien = '</citation>';
$finLien = strpos( $data[contenu], $marqueurFinLien ) ;
$citat = '</citation>';
$citation = preg_match_all($citat, $textes, $matches, PREG_OFFSET_CAPTURE);
if (preg_match($citat, $textes)){
foreach ( $citation as $leLien) {
$leLien = substr( $textes, $debutLien, $finLien - $debutLien);
$texthtml = htmlspecialchars($leLien);
$cite = str_replace( "$leLien", "$texthtml", $data[contenu]);
}
echo nl2br($cite);
El là bien évidement ce code ne fonctionne pas correctement, je cale, si vous pouviez éclairer ma lanterne, ce serait avec grand plaisir