Avatar billede baronen20 Nybegynder
14. februar 2003 - 12:34 Der er 14 kommentarer og
1 løsning

Problem med linieskift

Jeg har smidt noget tekst ind i en mySQL database, og den laver normale linieskift, og det er jo godt nok.
Dette:
Her er linie 1
Her er linie 2
Her er linie 3

Bliver til:
Her er linie 1
<br />
Her er linie 2
<br />
Her er linie 3

Nu vil jeg gerne redigere teksten, så jeg henter den ind i et <textarea>. Der kommer den jo så til at stå som:
Her er linie 1
<br />
Her er linie 2
<br />
Her er linie 3

...og når jeg så trykker ok, så bliver teksten i databasen til:
her er linie 1
<br />

<br />
her er linie 2
<br />

<br />
her er linie 3

...hvilket resulterer i flere linieskift...

Den gør det kun på mit webhotel, ikke lokalt.
Hvad kan jeg gøre?
Avatar billede baronen20 Nybegynder
14. februar 2003 - 12:35 #1
Hele teksten ryger gennem dette hver gang:

<?
function string_tagster($str) {
$str = " ".$str;
$str = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_-])((ftp|http|https|telnet|news|nttp|nntp|file):\/\/[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+(\\[|\\]|[a-z0-9~#%@\&:;,=\?\/_\+-])+)", "\\1<A HREF=\"\\2\" TARGET=\"_blank\" class=\"black\">\\2</A>", $str);
$str = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_-])(www\.[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+[a-z0-9~#%@\&:;,=\?\/_\+-]+)", "\\1<A HREF=\"http://\\2\" TARGET=\"_blank\" class=\"black\">\\2</A>", $str);
$str = eregi_replace("([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,4})","<A HREF=\"mailto:\\1\" class=\"black\">\\1</A>", $str);
return substr($str, 1);
}
$en_streng = "$besked";
$besked = string_tagster($en_streng);
$besked = str_replace('[','<b>', $besked);
$besked = str_replace(']','</b>', $besked);
$besked = str_replace('{','<i>', $besked);
$besked = str_replace('}','</i>', $besked);
?>
Avatar billede baronen20 Nybegynder
14. februar 2003 - 12:36 #2
...og det er så $besked der bliver smidt ind i databasen
Avatar billede baronen20 Nybegynder
14. februar 2003 - 12:38 #3
ups, der mangler lige dette i toppen:

$besked = addslashes(nl2br(strip_tags($_POST[tekst], '<b><i>')));
Avatar billede baronen20 Nybegynder
14. februar 2003 - 12:42 #4
Kan det løses på andre måder, end at ændre:

$besked = addslashes(nl2br(strip_tags($_POST[tekst], '<b><i>')));

til:

$besked = $_POST[tekst];
Avatar billede exp Juniormester
14. februar 2003 - 13:17 #5
Lad være med at replace linieskift med <br> når det lægges i databasen - det er nok at gøre det når dataene hentes ud og skrives til skærmen (+ det sparer plads i db'en
Avatar billede exp Juniormester
14. februar 2003 - 13:18 #6
Alle de ting du kører teksten igennem er slet ikke nødvendige - kør dem når du HAR trukket data ud af databasen igen!
Avatar billede baronen20 Nybegynder
16. februar 2003 - 15:07 #7
hvordan gør jeg det?
Avatar billede exp Juniormester
17. februar 2003 - 08:27 #8
Når du gemmer i databasen, skal du IKKE kører teksten igennem:

"<?
function string_tagster($str) {
$str = " ".$str;
$str = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_-])((ftp|http|https|telnet|news|nttp|nntp|file):\/\/[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+(\\[|\\]|[a-z0-9~#%@\&:;,=\?\/_\+-])+)", "\\1<A HREF=\"\\2\" TARGET=\"_blank\" class=\"black\">\\2</A>", $str);
$str = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_-])(www\.[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+[a-z0-9~#%@\&:;,=\?\/_\+-]+)", "\\1<A HREF=\"http://\\2\" TARGET=\"_blank\" class=\"black\">\\2</A>", $str);
$str = eregi_replace("([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,4})","<A HREF=\"mailto:\\1\" class=\"black\">\\1</A>", $str);
return substr($str, 1);
}
$en_streng = "$besked";
$besked = string_tagster($en_streng);
$besked = str_replace('[','<b>', $besked);
$besked = str_replace(']','</b>', $besked);
$besked = str_replace('{','<i>', $besked);
$besked = str_replace('}','</i>', $besked);
?>"

Det skal du først gøre når du laver output!

Mellemrum og linieskift gemmes stadig i databasen...
Avatar billede baronen20 Nybegynder
17. februar 2003 - 10:13 #9
Tak! det virker :)
Avatar billede exp Juniormester
17. februar 2003 - 10:18 #10
Takker for point :o)
Avatar billede razmuz Nybegynder
08. juli 2003 - 12:53 #11
Kan det ikke gøre en del simplere, hvis jeg kun ønsker at erstatte linieskift med <br>... Jeg har også en tekst fra en mysql-database, som oprindelig kommer fra <textarea>. Sandt nok, man skal ikke rode med erstatning af <br> før man henter teksten fra databasen. Men det kan da ikke være meningen at jeg skal have hele den bid kode med bare for at erstatte linieskift med <br>.

Det jeg søger er en simpel str_replace(klsdjfsklfdjsdf)... Hvad skal der stå?
Avatar billede exp Juniormester
08. juli 2003 - 12:56 #12
hvis du bare her en ren tekst i databasen (altså hvori der ikke fx står <br>) kan du bruge nl2br:

echo nl2br($str);
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:03 #13
hvis jeg skriver
<? echo "nl2br($bil_beskrivelse)"; ?>

så skriver den bare
nl2br(teksten fra databasen men ingen linieskift)
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:04 #14
Ha nu virker det... Jeg fjernede bare " ligesom du også havde gjort... jeg troede bare det var en fejl... tak for hjælpen...
Avatar billede exp Juniormester
08. juli 2003 - 13:13 #15
u r welcome
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