[RESOLU] Supprimer espace ou tabulation devant une chaine de caractères.

Eléphant du PHP | 213 Messages

04 juil. 2022, 16:06

Bonjour,

A la fin du cycle de l'application, je génère une chaine de caractères.
Mais seulement la première chaine s'affiche avec un espace ou une tabulation devant.

Code : Tout sélectionner

[ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_OUI][RDV_NON][RDV_BAL][RSDP_NON][COMMENT/NO][REGUL_NON][DEM_TRD < AE_aaaa> < TPX_1>][fe6fdfd6][4/07/2022 16:02:03][Version_2.02][ADC_END] [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_OUI][RDV_NON][RDV_BAL][RSDP_NON][COMMENT/NO][REGUL_NON][DEM_TRD < AE_bbbbbbbb> < TPX_2>][1dfa24c6][4/07/2022 16:02:03][Version_2.02][ADC_END] [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_OUI][RDV_NON][RDV_BAL][RSDP_NON][COMMENT/NO][REGUL_NON][DEM_TRD < AE_cccccccccccc> < TPX_3>][5b51c341][4/07/2022 16:02:03][Version_2.02][ADC_END]
La seule différence entre les 3 chaines, est cette partie.

Code : Tout sélectionner

[DEM_TRD < AE_aaaa> < TPX_1>][fe6fdfd6]
J'ai essayé avec trim, strpos, preg_replace, mais cela ne change rien.

Merci
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Mammouth du PHP | 1967 Messages

04 juil. 2022, 16:09

test ton premier caractère avec substr ($str, 0,1) et si c'est pas [ retire le avec substr($str,1)

ou mieux fait un substr à partir de la première occurence [ pour retirer les multiple espaces aussi
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Eléphanteau du PHP | 41 Messages

04 juil. 2022, 16:50

Balance ton code que je regarde ce qui te génère ce caractère en début de chaine
comme ça, ça vaudra le coup pour toi d'en apprendre plus rapidement. et si c'est une erreur tu pourras
patcher cette erreur. maintenant si un trim ne fonctionne pas c'est louche.

Eléphant du PHP | 213 Messages

05 juil. 2022, 09:48

Bonjour à tous,
Voici mon code.

Code : Tout sélectionner

<?php echo $_SESSION['BalisesChiffre'].'<br><br>'; $_SESSION['BalisesR3'] = $_SESSION['BalisesR3'].$_POST['balise']; $listeChiffre = $_SESSION['BalisesChiffre']; $pdt = $listeChiffre; switch ($pdt) { case $pdt == '2T': $_SESSION['BalisesGR21'] = $_SESSION["BalisesR1"] . $_SESSION["BalisesR3"] . $_SESSION["BalisesR4"] . $_SESSION["BalisesR21"]; $_SESSION['BalisesGR22'] = $_SESSION["BalisesR1"] . $_SESSION["BalisesR3"] . $_SESSION["BalisesR4"] . $_SESSION["BalisesR22"]; // Traitement du code pour le checksum. $chaine1 = $_SESSION['BalisesGR21']; $chaine2 = $_SESSION['BalisesGR22']; //le checksum ressemble à un CRC32. //En php il suffit d'appeler la fonction crc32 : $checksum1 = crc32($chaine1); $checksum2 = crc32($chaine2); // Cela génère un entier. // Représentation héxadécimal:faire un dechex : $str1 = dechex($checksum1); $str2 = dechex($checksum2); // Ajout des dernières balises. // Set session variables setlocale(LC_TIME, 'fra_fra'); $timezone = +2; //(GMT +2:00) EST (F.R. & PARIS) $date = '[' . gmdate("j/m/Y H:i:s", time() + 3600 * ($timezone + date("I"))) . ']'; $code = "[ADC_END]"; $version = "[Version_2.02]"; $_SESSION["BalisesGR21"] = $_SESSION['BalisesGR21'] . '[' . $str1 . ']' . $date . $version . $code; $_SESSION["BalisesGR22"] = $_SESSION['BalisesGR22'] . '[' . $str2 . ']' . $date . $version . $code; // Traitement des espaces. $chaineAvecCaractere = $_SESSION['BalisesGR21']; $res='/\]\&+\[/'; $subst = ' '; $chaineSansCaractere = preg_replace($res, $subst, $chaineAvecCaractere); $_SESSION["BalisesGR21"] = $chaineSansCaractere; echo $_SESSION["BalisesGR21"] . '<br>' . 'IF2T avec chiffres <br><br>'; echo $_SESSION["BalisesGR22"] . '<br>' . 'IF2T avec chiffres <br><br>'; RedondanceCopierBalisesR22(); break;
Merci pour votre patience.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Eléphanteau du PHP | 41 Messages

05 juil. 2022, 11:01

tu dois faire un var_dump de $chaineSansCaractere
avant $chaineSansCaractere = preg_replace($res, $subst, $chaineAvecCaractere);
pour savoir sur quoi travail le replace de '/\]\&+\[/' par ' ' .
perso moi j'aurais mis $subst = chr(32); comme ça tu as la certitude que c'est 1 espace; le jour ou un gamin en stage joue avec ton script
et sans le savoir il ajoute un autre espace tu fera pas la différence entre ' ' et ' ' visuellement ça te sera compliqué
mais certain utilise aussi "\x32" à la place de chr(32) chacun son style.
bref je pense que le pre_replace met un espace devant.

avec le var_dump tu vas pouvoir avoir la chaine sur quoi travail le preg_replace et
avec un outils magique : https://regex101.com/
tu pourra tester ta chaine et voir le comportement de '/\]\&+\[/'

copie ici la chaine obtenu par le var_dump de $chaineAvecCaractere
avant : $chaineSansCaractere = preg_replace($res, $subst, $chaineAvecCaractere);

Eléphant du PHP | 213 Messages

05 juil. 2022, 12:06

Bonjour,
j'ai fait les tests avec
test ton premier caractère avec substr ($str, 0,1) et si c'est pas [ retire le avec substr($str,1)

ou mieux fait un substr à partir de la première occurence [ pour retirer les multiple espaces aussi
Et avec le code de
tu dois faire un var_dump de $chaineSansCaractere
avant $chaineSansCaractere = preg_replace($res, $subst, $chaineAvecCaractere);
pour savoir sur quoi travail le replace de '/\]\&+\[/' par ' ' .
perso moi j'aurais mis $subst = chr(32); comme ça tu as la certitude que c'est 1 espace; le jour ou un gamin en stage joue avec ton script
et sans le savoir il ajoute un autre espace tu fera pas la différence entre ' ' et ' ' visuellement ça te sera compliqué
mais certain utilise aussi "\x32" à la place de chr(32) chacun son style.
bref je pense que le pre_replace met un espace devant.

avec le var_dump tu vas pouvoir avoir la chaine sur quoi travail le preg_replace et
avec un outils magique : https://regex101.com/
tu pourra tester ta chaine et voir le comportement de '/\]\&+\[/'

copie ici la chaine obtenu par le var_dump de $chaineAvecCaractere
avant : $chaineSansCaractere = preg_replace($res, $subst, $chaineAvecCaractere);
Mais cela ne change rien.
J'ai fait le test en inversant les echo.
Quelle que soit la chaine de caractère il y a un espace.
Sur le site de https://regex101.com/ je remarque 7 espaces avant la chaine.

Je pense que cela ne vient pas du code, mais de l'affichage de ma textaera.
Est-ce possible?
Merci.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

05 juil. 2022, 14:04

Bonjour,

Je viens de faire un test avec une chaine de données.
Cela créé un saut de ligne juste avant la chaine, et un saut de ligne après la fin des chaines.

Code : Tout sélectionner

kiejensikljflksdjfieiehjkfskjdfnskjdfekirehjikjsndfjdsknfdfsjierhiknsjdnfknfkksdfskdnfieenjfkdksnfksndfknfdnfnsfksfeiejkndjfnkdnsfkd,feijidn,nfksnfdjkfsdjkhfhehj [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_OUI][RDV_NON][RDV_BAL][RSDP_NC][COMMENT/NO][COMMENT/NO][REGUL_NON][LOG_QUE < AE_zaea> < TPX_1>][4404b793][5/07/2022 13:58:47][Version_2.02][ADC_END] [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_OUI][RDV_NON][RDV_BAL][RSDP_NC][COMMENT/NO][COMMENT/NO][REGUL_NON][LOG_QUE < AE_zaeeaze> < TPX_1>][2d5a4317][5/07/2022 13:58:47][Version_2.02][ADC_END]
j'ai supprimé tous code de traitement des espaces, je les ai remis, mais c'est idem.
Ce que je ne comprends pas, c'est que c'est la même code que sur une autre page et cela fonctionne bien.

Merci.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

05 juil. 2022, 14:14

Bonjour,
Je viens de comprendre ce qu'il se passait.
Ce code met un saut de ligne avant la chaine et après.

Code : Tout sélectionner

<textarea class="js-text" id="texte" cols="80" rows="8"disabled="disabled"> <?php echo $_SESSION["BalisesGR21"],PHP_EOL; echo $_SESSION["BalisesGR21"];?> </textarea>
Tandis que celui-ci ne le fait pas, car la code est sur une seule ligne.

Code : Tout sélectionner

<textarea class="js-text" id="texte" cols="80" rows="8"disabled="disabled"><?php echo $_SESSION["BalisesGR21"],PHP_EOL;echo $_SESSION["BalisesGR21"];?> </textarea>
Merci à tous pour vos aides.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Eléphanteau du PHP | 41 Messages

05 juil. 2022, 19:39

c'est bien pour éviter ce genre d'erreur que l'on produit du code que n'est jamais au grand jamais mélanger avec du HTML . mais je salut ton utilisation du PHP_EOL c'est beau ;)
oui si tu réalise un saut de ligne dans l'écriture de ton code

Code : Tout sélectionner

...disabled="disabled">(ici) <?php echo $_SESSION...
à l'endroit ou je met (ici) tu as un saut de ligne physique, dans ton écriture donc oui elle se rajoute.
et c'est bien pour tout un tas de chose pareil que l'on ne mélange plus HTML et PHP. même si ça
fonctionne mal heureusement encore. je pense qu'un jour ça va disparaitre. enfin pour le moment
c'est le cas par convention d'écriture.

Eléphant du PHP | 213 Messages

06 juil. 2022, 09:15

Bonjour Dsynx ,
Merci à toi et tes cours, que je lis avec plaisir.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.