Avatar billede heyn Nybegynder
13. maj 2014 - 19:20 Der er 8 kommentarer og
1 løsning

Hvordan fjerner jeg 'ny linie' i en tekst?

Hej Eksperter

Jeg henter nogle data fra en MySQL database.

Disse ønsker jeg at sætte ind i et array.

for ($i=0;$i<mysql_num_rows($result);$i++) {
    $row = mysql_fetch_array($result);
    $arrangements[$row['start']]['id'] = $row['id'];
    $arrangements[$row['start']]['name'] = $row['name'];
    $arrangements[$row['start']]['start'] = $row['start'];
    $arrangements[$row['start']]['end'] = $row['end'];
    $row['text'] = trim(str_replace('\n','',$row['text']));
    $row['text'] = str_replace('\t','',$row['text']);
    $row['text'] = str_replace('\r','',$row['text']);
    $arrangements[$row['start']]['text'] = $row['text'];
    $arrangements[$row['start']]['visible'] = $row['visible'];
}

'text' er af datatypen varchar(300) i databasen.

På trods af de 3 str_replace forsvinder 'ny linie' ikke fra $row['text'].

Kan nogle give mig en forklaring og helst også en løsning på dette problem?

Venligst Christian
Avatar billede arne_v Ekspert
13. maj 2014 - 19:29 #1
Indeholder tekst <br> ?
Avatar billede heyn Nybegynder
13. maj 2014 - 19:58 #2
Nej - Men det kunne godt ske.
Alle afsnit i teksten som skal gemmes i (php) arrayet starter med <p>.
Avatar billede heyn Nybegynder
13. maj 2014 - 20:11 #3
Egentlig er det meningen at arrayet skal bruges til at oprette et tilsvarende array i javascript. Det er der problemet opstår. Det går galt.

Når jeg laver:

<script type="text/javascript">
var arrangements = [];
<?php foreach($arrangements as $arrangement){ ?>
arrangements[<?php echo $arrangement['id'];?>] = {};
...
arrangements[<?php echo $arrangement['id'];?>]['text'] = '<?php echo $arrangement['text'];?>';
...
<?php } ?>
</script>

kommer følgende javascript frem på siden:

arrangements[1]['text'] = '<p>
    Hello</p>
<p>
    World</p>';

Der er altså ny linie efter <p>

Det er wisywyg editoren CKEDITOR som oprindeligt har lavet teksten før den gemmes i databasen, og af en eller anden årsag er der ny linie efter <p>.
Det kan jeg jo ikke rigtig gøre noget ved.

Men hvordan fjerner jeg det igen.
Avatar billede arne_v Ekspert
14. maj 2014 - 01:13 #4
<p></p> markerer afsnit. Der er altid linieskift mellem afsnit. Det er naermest definitionen paa et afsnit.

Saa enten skal du droppe afsnit eller saa maa du leve med linieskift.
Avatar billede heyn Nybegynder
14. maj 2014 - 13:03 #5
Det med <p> er klart nok.

men hvad jeg ønskede var at lave

arrangements[1]['text'] = '<p>
    Hello</p>
<p>
    World</p>';

om til

arrangements[1]['text'] = '<p>Hello</p><p>World</p>';

Da det i html jo er ligegyldigt om man anvender ny linie.

Efter en del kamp er jeg nået frem til følgende løsning:

$row['text'] = trim(str_replace(chr(10),'\n',$row['text']));
$row['text'] = str_replace(chr(9),'\t',$row['text']);
$row['text'] = str_replace(chr(13),'\r',$row['text']);

Så behøver jeg slet ikke fjerne 'tab', 'newline' og 'cariage return'.
I mit javascript står der nu:

arrangements[1]['text'] = '<p>\n\tHello</p>\n<p>\n\tWorld</p>';

Send et svar.
Avatar billede arne_v Ekspert
14. maj 2014 - 14:57 #6
Nu tror jeg at det begynder at daemre.

:-)

Den oprindelige kode:

    $row['text'] = trim(str_replace('\n','',$row['text']));
    $row['text'] = str_replace('\t','',$row['text']);
    $row['text'] = str_replace('\r','',$row['text']);

skal nok vaere:

    $row['text'] = trim(str_replace("\n",'',$row['text']));
    $row['text'] = str_replace("\t",'',$row['text']);
    $row['text'] = str_replace("\r",'',$row['text']);
Avatar billede arne_v Ekspert
14. maj 2014 - 14:57 #7
og et svar
Avatar billede heyn Nybegynder
14. maj 2014 - 15:04 #8
Aha - Dobbelt " i stedet for '
Avatar billede arne_v Ekspert
14. maj 2014 - 15:08 #9
Ja. \r og \n har kun speciel betydning i "" ikke i ''.
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