[PHP] virer retours chariot d'une chaine [Fermé]

Signaler
-
 Mello -
salut j'utilise la fonction str_replace pour essayer d'enlever les retours chariot (=chr(13) d'une chaine avant de la stocker en base de données ... mais rien y fait ! quand je teste avec un simple echo ils sont bien remplacés mais subsiste un espace bizarroïde. et quand je balance le tout a mysql mes retours chariot sont toujours là !!! :-///

// retraitement du texte à insérer
$news = str_replace(chr(13), "-", $_REQUEST['news_input']);

// execution sql 1
$sql1_query = mysql_query("
INSERT INTO mtg_news (date, joueur, news)
VALUES ('"
. $annee . "-" . $mois ."-" . $jour . "','"
. strtolower(trim(substr($_REQUEST['joueur_input'], 0, 100))) . "','"
. $news . "')"
) or die (mysql_error());

merci !
+

9 réponses

$n = str_replace(CHR(13),"",$n); $n = str_replace(CHR(10),"",$n);

c'est bien mais

$n = str_replace(CHR(13).CHR(10),"",$n);

c'est mieux.

Merci pour votre aide car j'avais oublié comment on faisait. (vive google) LoL
22
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

C'est effectivement cette solution qui est la meilleur et qui peut se décliner comme ceci:

$tab = array( CHR(13) => " ", CHR(10) => " " );
$n = strtr($n,$tab);

Ce qui permet d'ajouter facilement d'autres caractères ou chaines à remplacer facilement dans le tableau.
Pour ma part j'aurais fait :
$n = str_replace(PHP_EOL,"",$n);

Ca évite les problème potentiel d'OS de l'hébergeur :)
Messages postés
18
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
15 janvier 2014
69
Messages postés
2004
Date d'inscription
vendredi 8 juin 2007
Statut
Membre
Dernière intervention
14 décembre 2016
232
ooh merci merci !
C'est ce qu'il me fallait, encore merci !
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 494
Essaie avec:
$news = str_replace("\n", "-", $_REQUEST['news_input']);
Et aussi peut être à la suite:
$news = str_replace("\t", "-", $_REQUEST['news_input']);

Tes espaces bizzares sont peut être des tabulations.
c bidon mais ça marche:

$n = '
';
string = str_replace($n, '', $_POST['string_with_chariot']);

;)
Salut hacki,

utilises plutôt ceci je pense que c'est mieu

$n = str_replace(CHR(13),"",$n); $n = str_replace(CHR(10),"",$n);
Au plus simple :

function traiterChaine($chaine) {
$chaine = str_replace('\r\n', '', $chaine);
$chaine = str_replace('\r', '', $chaine);
$chaine = str_replace('\n', '', $chaine);
return $chaine;
}
ou encore
str_replace(array("\r\n", "\r", "\n", PHP_EOL, chr(10), chr(13), chr(10).chr(13)), "", $chaine)
dans le genre complet...
ça peut aussi servir:

function noreturn($chaine) {
$chaine = str_replace('\r\n', '', $chaine);
$chaine = str_replace('\r', '', $chaine);
$chaine = str_replace('\n', '', $chaine);
$chaine = str_replace("
", '', $chaine);
return $chaine;
}
Messages postés
515
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
28 février 2007
121
Attention, sous windows, les retours chariot sont :
\r\n ou \n\r, je sais plus... Enfin la fonction nl2br arrange ca en fonction de l'OS du serveur (donc pas de soucis pour faire tourner ton script sur un serveur linux).
Donc :
$news = str_replace("<br>","-", nl2br($_REQUEST['news_input'])); devrait marcher.
rien ne vaut une bonne boucle !

$str = $_REQUEST['news_input'];
$pos = strpos($str, "\n");
if ($pos !== false) {
while($pos !== false) {
$tmp = $tmp . " " . trim(substr($str, 0, $pos));
$str = substr($str, $pos+1, strlen($str));
$pos = strpos($str, "\n");
};
$news = $tmp . " " . trim($str);
} else {
$news = $str;
}

ce bricolage fonctionne ;-)

+
merci mais rien n'y fait :-///
+