Avatar billede lademan Novice
10. februar 2004 - 15:50 Der er 32 kommentarer og
1 løsning

Erstat <br> med billeder

Hej.

Jeg har problemer med at lave et script, hvor jeg hiver nogle $row[billedeadresser] ud af en tabel. Disse $row[billedeadresser] skal udskiftes med de første <br> i $row[teksten].

Et eksempel, der illustrerer min problemstilling:

I $row[teksten] sker følgende:
<br1> udskiftes med billedeadresse[1]
<br2> udskiftes med billedeadresse[2]
<br3> udskiftes med billedeadresse[3]
- når der ikke er flere billedeadresser forbliver de resterende <br>'s.

print "$row[teksten]";
Avatar billede lademan Novice
10. februar 2004 - 16:04 #1
Jeg forhøjer gerne :-)
Avatar billede detox Nybegynder
10. februar 2004 - 16:18 #2
Her er en idè:

for ($i=0;$i<count($billedeadresse);$i++) {
    $row['teksten'] = preg_replace("/<br>/U", $billedeadresse[$i], $row['teksten'], 1);
}
Avatar billede lademan Novice
10. februar 2004 - 16:50 #3
Det virker fint, når kun en <br> skal udskiftes, men hvordan gør jeg det med 2 <br> ??

:-)
Avatar billede lademan Novice
10. februar 2004 - 16:53 #4
Det skal siges, at <br>'erne er placeret på flg måde i $row[teksten]:

<br>tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst
<br>tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst
<br>
<br>tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst tekst
Avatar billede lademan Novice
10. februar 2004 - 16:54 #5
- det er altså kun de 2 nederste <br>'s der skal udskiftes med $billedeadresse
Avatar billede detox Nybegynder
10. februar 2004 - 17:00 #6
Hvis du har dine billedadresser liggende i et array: $billedeadresse() burde eksemplet virke.
Den vil dog ikke udskifte de nederste, men de første (som du beskrev i spørgsmålet).
Avatar billede lademan Novice
10. februar 2004 - 17:09 #7
jeps, det er også cool!

Jeg vil bare gerne, at følgende kommer til at virke:

$row['teksten'] = preg_replace("/<br>n\<br>/U", $billedeadresse[$i], $row['teksten'], 1);

Jf. Kommentar: lademan, 10/02-2004 16:53:31

:-)
Avatar billede detox Nybegynder
10. februar 2004 - 17:14 #8
"/<br>n\<br>/U" skal nok se lidt anderledes ud. Hvad er det mere præcist du ønsker at udskifte?
Avatar billede detox Nybegynder
10. februar 2004 - 17:18 #9
Hvis du vil udskifte: "<br>\n<br>", skal den se sådan ud: "/<br>\\n<br>/"
Avatar billede lademan Novice
10. februar 2004 - 17:19 #10
Ok.

Kan man lave det således, at der mindst skal være 100 tegn imellem 2 <br>'s, før at en <br> kan tælle som et "udskiftningsobjekt"?
Avatar billede lademan Novice
10. februar 2004 - 17:23 #11
Ved godt, at det måske kommer som en kovending, men det er egentlig mit oprindelige projekt :-)
Avatar billede detox Nybegynder
10. februar 2004 - 17:51 #12
Tja, nu ved jeg jo ikke om det er <br> eller <br>\n<br> der skal udskiftes. Men her er et forslag:

$row['teksten'] = preg_replace("/([\w\s]{100,})<br>/", "$1".$billedeadresse[$i], $row['teksten'], 1);
Avatar billede yellow Nybegynder
10. februar 2004 - 17:55 #13
"der mindst skal være 100 tegn imellem 2 <br>'s" - bliver lidt langhåret.
Hvis du kan nøjes med "100 tegn uden <br> før en <br>" er det straks lidt nemmere.

Forskellen er at i den nye definition vil du ikke få en match på den første <br> hvis den er inden for de første 100 tegn.

Hvis den antagelse kan accepteres kan du bruge:
/(?<=[^(<br>)]{100})<br>/

Og så skal du lige være opmærksom på at der er sat en limit på een match i ovenstående preg_replace eksempler. Enten skal du helt udelade 4. argument, eller så skal du sætte det til -1. ( eller endnu bedre i dit tilfælde: længden af dit $billedeadresse array ).

Summa summarum:
$row['teksten'] = preg_replace("/(?<=[^(<br>)]{100})<br>/", $billedeadresse[$i], $row['teksten'], count($billedeadresse) );
Avatar billede lademan Novice
10. februar 2004 - 18:03 #14
Jeg kan ikke få den til at virke:

while($row2 = mysql_fetch_array($result2)){
$row[tekst] = preg_replace("/([\w\s]{100,})<br>/", "<img src=\"$row2[billede]\" width=\"$size[0]\" border=\"0\">", $row[tekst], 1);
}
Avatar billede yellow Nybegynder
10. februar 2004 - 18:04 #15
/(?<=[^(<br>)]{100})<br>/
Uhm, det udtryk duer ikke alligevel. Undskyld er lidt rusten i regexps.
Avatar billede detox Nybegynder
10. februar 2004 - 18:08 #16
regexp's er ikke min livret. Det går jo galt i andet gennemløb, da den så vil matche alle <br> (da den forrige jo er byttet ud). Jeg er faktisk ikke sikker på hvordan du løser det.
Avatar billede lademan Novice
10. februar 2004 - 18:08 #17
nej, jeg er heller ikke stærk i det...
du har ikke et andet forslag?
Avatar billede lademan Novice
10. februar 2004 - 18:24 #18
Kan vi så ikke "bare" få <br>\n<br> til at virke?

:-)
Avatar billede detox Nybegynder
10. februar 2004 - 18:29 #19
Ja, umiddelbart har jeg ikke nogen idéer til det andet. Virker det ikke med:

$row['teksten'] = preg_replace("/<br>\\n<br>/", $billedeadresse[$i], $row['teksten'], 1);
Avatar billede detox Nybegynder
10. februar 2004 - 18:30 #20
Altså:

for ($i=0;$i<count($billedeadresse);$i++) {
    $row['teksten'] = preg_replace("/<br>\\n<br>/", $billedeadresse[$i], $row['teksten'], 1);
}
Avatar billede detox Nybegynder
10. februar 2004 - 18:33 #21
while($row2 = mysql_fetch_array($result2)){
  $row['tekst'] = preg_replace("/<br>\\n<br>/", "<img src=\"$row2[billede]\" width=\"$size[0]\" border=\"0\">", $row['tekst'], 1);
}
Avatar billede lademan Novice
10. februar 2004 - 18:45 #22
Det virker ikke?
Avatar billede detox Nybegynder
10. februar 2004 - 18:47 #23
Kommer der fejl eller bytter den ikke noget ud eller...?
Avatar billede lademan Novice
10. februar 2004 - 18:49 #24
Den bytter ikke noget ud..
Avatar billede detox Nybegynder
10. februar 2004 - 18:52 #25
Kan det tænkes at: <br>\n<br> ser anderledes ud? Måske: <br>\r\n<br> eller: <br>\n\n<br>
Avatar billede lademan Novice
10. februar 2004 - 18:53 #26
prøver lige...
Avatar billede lademan Novice
10. februar 2004 - 18:56 #27
jeg ved ikke hvilke bogstav(er) jeg skal tilføje imellem de to <br>, men det ser sådan her ud i databasen:

<br>
<br>
Avatar billede detox Nybegynder
10. februar 2004 - 19:00 #28
Prøv med: "/<br>\\r\\n<br>/"
Avatar billede lademan Novice
10. februar 2004 - 19:06 #29
Det virker heller ikke :-(
Avatar billede lademan Novice
10. februar 2004 - 19:07 #30
Kan man ikke lave et eller andet smart, så der kan være fx 25 tegn imellem to <br>'er?
Avatar billede detox Nybegynder
10. februar 2004 - 19:23 #31
Jo, det kan man sikkert godt. Jeg ved bare ikke helt hvordan regexp skal se ud. Ellers kan du måske prøve dig frem til hvilke karakterer der angiver "new line" i din database. Fx: "/<br>\r\n<br>/" eller "/<br>\\n\\n<br>/".
Avatar billede yellow Nybegynder
10. februar 2004 - 21:52 #32
Rodede lidt mere med det:
<?php
$row["teksten"] = "0123456789<br>0123456<br>abc<br>0123456789<br>asdfes";
$billedeadresse = array(
                    "<img src='img1.gif'>",
                    "<img src='img2.gif'>",
                  );
echo preg_replace("/(.{10,}?)(<br>)/e",'"$1".(count($billedeadresse>0)?array_shift($billedeadresse):"$2" )',$row["teksten"]);
?>
Resultat: 0123456789<img src='img1.gif'>0123456<br>abc<img src='img2.gif'>0123456789asdfes

Første <br> bliver udskiftet med første billede da den har 10 eller mere karakterer inden (0123456789).
Anden <br> bliver IKKE udskiftet, da den kun har 7 karakterer inden (0123456)
Tredie <br> bliver udskiftet med andet billede da den har 10 eller mere karakterer inden ( 0123456<br>abc ). <br> nr2 tæller her med som karakterer da de ikke blev matchet på sidst.
Fjerde <br> har godt nok 10 karakterer, men bliver ikke udskiftet, da der ikke er flere billeder i $billedeadresse.

Ok, det var mest for at vise en copy/paste version der fungerer.
Din version med 100 karakterer inden en <br> vil så se således ud:

preg_replace("/(.{100,}?)(<br>)/e",'"$1".(count($billedeadresse>0)?array_shift($billedeadresse):"$2" )',$row["teksten"]);
Avatar billede lademan Novice
25. november 2007 - 16:40 #33
Mange tak for hjælpen! Da der ikke er nogen, der har afgivet svar, lukkes tråden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester