[RESOLU] chaine de caracteres, extraire juste une ligne

Petit nouveau ! | 8 Messages

05 mai 2015, 13:37

bonjour ici !

j'ai installé un forum phpbb3 et je joue avec le code.
je souhaite extraire des lignes depuis un message du forum, j'ai donc fait une requete qui me donne par exemple :

Code : Tout sélectionner

$data =" presentation blablablabla voiture : ferrari turbo puissance : 34 cv poids : 1200 kg commentaire : elle est chère";
(je détaille pas, mais j'ai trouvé comment retrouver les sauts de lignes comme dans le message sur forum)

j'aimerai extraire uniquement : voiture : ferrari turbo
or je fais :

Code : Tout sélectionner

echo strpbrk($data, 'voiture :');
il ne va pas s'arrêter, il va me copier tout le texte qui suivra :
voiture : ferrari turbo
puissance : 34 cv
poids : 1200 kg
commentaire : elle est chère


comment lui dire de ne copier que jusqu'au saut de ligne

par avance, merci

ViPHP
xTG
ViPHP | 7331 Messages

05 mai 2015, 14:18

Tu peux conserver ce code et rajouter explode sur le caractère de retour à la ligne.
Tu obtiendras un tableau de ligne, tu t'intéresses à la première. ;)

Petit nouveau ! | 8 Messages

05 mai 2015, 17:48

salut xTG

je récapitule : j'affiche ca :
NOM DU JEU : PROJECT CARS
VOLANT / MANETTE / CLAVIER : volant G27
AIDE A LA CONDUITE (OUI/NON) : non
FREIN ABS (OUI/NON) : non
CONTRÔLE MOTRICITÉ (OUI/NON) : non


et je voudrais ca :
NOM DU JEU : PROJECT CARS

voila mon bout de code :

Code : Tout sélectionner

$details = $data2['post_text']; $details2 = utf8_encode($details); $details3 = nl2br($details2); $adresse = $details3; $arobase = "NOM DU JEU :"; $total = strstr($adresse,$arobase) . "<br />";
qui permet d'écrire le message avec les bons sauts de ligne et/ou les espaces,
donc j'ai utilisé explode :

Code : Tout sélectionner

$details = $data2['post_text']; $details2 = utf8_encode($details); $details3 = nl2br($details2); $adresse = $details3; $arobase = "NOM DU JEU :"; $total = strstr($adresse,$arobase) . "<br />"; $pieces = explode(" ", $total); echo $pieces;
il me mets : Array

?? merci pour l'aide :D

Mammouth du PHP | 688 Messages

05 mai 2015, 18:01

echo $pieces[0];

Petit nouveau ! | 8 Messages

05 mai 2015, 18:51

merci mais cela ne fonctionne pas

je récapitule : j'affiche ca :
NOM DU JEU : PROJECT CARS
VOLANT / MANETTE / CLAVIER : volant G27
AIDE A LA CONDUITE (OUI/NON) : non
si je fais echo $pieces[0]; il m'affiche PROJECT


et je souhaite :
NOM DU JEU : PROJECT CARS

si je fais echo $pieces[4]; il m'affiche PROJECT
si je fais echo $pieces[5]; il m'affiche CARS

sachant que j'ai des noms parfois simple, parfois composés, je ne sais pas combien c'est aléatoire
donc il me faut bien le saut de ligne, pas une detection d'espace ^^

c'est compliqué ^^

Avatar du membre
Mammouth du PHP | 1609 Messages

06 mai 2015, 15:45

La particularité du retour à la ligne est qu'il peut avoir plusieurs façon d'être encodé : \n, \r, \r\n

En reprenant ton premier code ça donnerait :
echo substr(strpbrk($data, 'voiture :'), 0, strpos(strpbrk($data, 'voiture :'), "\n"));
Testes les différents types de retour à la ligne jusqu'à obtenir celui qui fonctionne.

A noter les " sont important, si tu mets '\n' le \n ne sera pas interprété comme un retour à la ligne.

PS l'idée de xTG est bonne aussi. Après ton strpbrk tu explode sur le retour à la ligne et tu prends la première ligne. Faut juste trouver le bon retour à la ligne.
Développeur web depuis + de 20 ans

Petit nouveau ! | 8 Messages

06 mai 2015, 15:58

Bonjour Saian et merci pour ton aide aussi !
je vais tester ton code,
ce qui est embetant, c'est que la chaine en question, c'est le forum phpbb3 qui la fait, via un post dans le forum, je récupère le message.
Donc dans mysql, il y a des espaces, je ne sais pas comment le système fait pour reconnaitre les espaces et les sauts de ligne,
la commande

Code : Tout sélectionner

$details3 = nl2br($details2);
y arrive bien pourtant...
bon j'essaye et je vous tiens au courant :wink:

Petit nouveau ! | 8 Messages

06 mai 2015, 17:28

bon j'ai fait des tas d'essais, ca ne marche pas, il me détecte que la 1ere ligne

echo substr(strpbrk($data, 'voiture :'), 0, strpos(strpbrk($data, 'voiture :'), "\n"));

si je change ce chiffre, ca me décale les caractères, donc vers 26 j'ai la bonne ligne,
mais si un message est différent, ca déplace les caractères

tanpis, merci pour l'aide, je laisse tomber, trop compliqué :?

Avatar du membre
Mammouth du PHP | 1609 Messages

06 mai 2015, 17:33

Mais non ça n'a rien de compliqué. ;)
$data = '
presentation blablablabla
voiture : ferrari turbo
puissance : 34 cv
poids : 1200 kg
commentaire : elle est chère'; 

$data = substr($data, strpos($data, 'voiture :'));
echo $data = substr($data, 0, strpos($data, "\n"));
Développeur web depuis + de 20 ans