Supprimer le caractère & dans une chaine

Eléphant du PHP | 213 Messages

07 juin 2022, 18:42

Bonjour,
J'ai ce code pour trier les balises qui fonctionne à merveille.

Code : Tout sélectionner

<?PHP function triBalises() { $baliseStart ='4'; $baliseEnd ='4'; $nature = $_SESSION['Balises2']; echo $_SESSION['Balises2'].'<br> TRIBALISE <br><br>'; // Traitement du début de la chaine. $pos = strpos($nature, $baliseStart); $_SESSION['BalisesStart'] = substr($nature,0,$pos); echo 'BaliseStart ==>'.$_SESSION['BalisesStart'].'<br> TRI BALISESTART <br><br>' ; //Traitement de fin de chaine. $nature_inversee = strrev($nature); //on inverse la string $baliseEnd ='4'; $pos = strpos($nature_inversee, $baliseEnd); //position du caractère 4 dans la string inversée $_SESSION['BalisesEnd'] = substr($nature_inversee,0, $pos); $_SESSION['BalisesEnd'] = strrev( $_SESSION['BalisesEnd']); echo 'BaliseEnd ==>'.$_SESSION['BalisesEnd'].'<br> TRI BALISES END <br><br>'; //Doit donner la fin de la chaine des balises. // Concaténation des chaines. $_SESSION['BaliseNew'] = $_SESSION['BalisesStart']. $_SESSION['Balises3'].$_SESSION['Balises4'].$_SESSION['BalisesEnd'] ; $_SESSION["BalisesGeneral"] = $_SESSION["BaliseNew"]; echo 'BaliseTotale ===>'.$_SESSION['BalisesGeneral'].'<br> tri balises'; } ?>
Seulement si dans la balises le chiffre 4 existe, cela coupe la balise ce qui est normal.
J'ai donc remplacé la valeur de $page par &.
Mais je ne sait comment lui dire de retirer le & dans le preg_replace.
la chaine est bien trié mais il reste le &5

Code : Tout sélectionner

[ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON]&5[DEM_PDT_PCF < AE_PC9[RDV_NON][RDV_BAL][RSDP_NC][COMMENT/NO][REGUL_NON][DEM_PDT_PCF < AE_PC444444444>< TPX_1>][ba5e0bf9][7/06/2022 18:40:53][Version_2.02][ADC_END]
Voici le code pour preg_replace.

Code : Tout sélectionner

// Traitement des chiffres. $chaineAvecChiffres = $_SESSION['BalisesGeneral']; $chaineSansChiffres = preg_replace('/\]\d+\\[/', '][', $chaineAvecChiffres); $_SESSION["BalisesGeneral"] = $chaineSansChiffres; echo $_SESSION["Balises2"].'<br>Balises2<br><br>'.$_SESSION["Balises3"].'<br>Balises3<br><br>'.$_SESSION["Balises4"].'<br>Balises4<br><br>'.$_SESSION["BalisesGeneral"].'<br>BaliseGénérale<br><br>'."IF sans chiffres'";
Merci
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

07 juin 2022, 18:58

Bonjour,
J'ai rajouté ce code juste après le premier preg_replace

Code : Tout sélectionner

// Traitement des caractères. $chaineAvecCaractere = $_SESSION['BalisesGeneral']; $chaineSansCaractere = preg_replace('/\]\&+\[/', '][', $chaineAvecCaractere); $_SESSION["BalisesGeneral"] = $chaineSansCaractere; echo $_SESSION["Balises2"].'<br><br>'.$_SESSION["Balises3"].'<br><br>'.$_SESSION["Balises4"].'<br><br>'.$_SESSION["BalisesGeneral"].'<br><br>'."IF sans Caractere'";
Est-il possible de faire un seul code?
Merci
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Eléphanteau du PHP | 41 Messages

10 juin 2022, 11:07

tu as tester avec str_replace c'est souvant plus puissant que preg_replace. et plus puissant que str_ireplace.
str_replace('&', '', $ma_chaine);

normalement ça marche bien mais ça va te retirer tout les & de l'ensemble de la chaine. si tu cherche à localisé précisément le & effectivement
seule le regex pourra le faire.
donc on doit savoir qu'est ce qu'il y a dans $chaineAvecCaractere
ou le bout contenant la parti ou tu peux retirer violemment tout les & donc ça n'affectera pas les contenus entre les balises
ou tu as dans $chaineAvecCaractere et bien tu contenu avec des balises et entre les balises et là tu peux avoir je sais un texte avec un & genre
<a &&> <i>&icone</i></a> là il te faudra effectivement un regex pour lui dire de viré les && spécifiquement dans <a>
alors moi je te conseil de teste ton regex avec le site regex101 (.) com là si je comprend bien
'/\]\&+\[/'
donc il détecte ] et & il indique s'il y a au moins 1 ou plus de & avec le + il détecte [

je viens de tester ça fonctionne chez moi
$re = '/\]\&+\[/';
$str = '<test]&[ test> &icinon&& < ]&&&[ test2>';
$subst = '][';

$result = preg_replace($re, $subst, $str);

echo "Le résultat de la substitution est ".$result;
résultat:

Code : Tout sélectionner

Le résultat de la substitution est <test][ test> &icinon&& < ][ test2>
Je te conseil d'utilisé le site onlinephp (.) io
pour faire des tests rapide de se style