EOL probleem in Linux, in IIS werkt het goed.
Net als deze tekst heb ik een mysql database met zo'n tekst die komt uit eeb input en heeft gewone regelafbrekingen.
Nu wil ik die tekst via innerHTML op het scherm weergeven. Echter in de html wordt de code in "onclick" dus ook afgebroken.
In de html krijg je dan
onclick = bla bla innerHTML='1e regel
2e regel
3e regel'
Nu heb ik dat op mijn windows test server met php weten op te lossen met
Nu blijkt het echter op de linux webserver niet te werken.
Iemand een idee?
p.s. ik al 3x geprobeer met <script>, <code> maar iedere keer krijg ik de code niet in een code venster. wellicht een idee omdat tussen titel en tekst waar ook B I U S link en quote staat te zetten.
Gewijzigd op 06/03/2014 10:30:27 door Rene Wennekes
http://stackoverflow.com/questions/20908100/invisible-character-at-the-end-of-line-using-line-break:
If you are unsure about whether a single \n or \r could occur (and either is a valid line end), or possibly in combination with the other, here is a belt-and-suspenders approach:
replace all \n\r and all \r\n combos with \n alone.
replace all remaining \r with \n.
replace all \n with <br/>
with
string = string.replace(/\r?\n\r?/g, '\n');
string = string.replace(/\r/g, '\n');
string = string.replace(/\n/g,'<br/>');
Written out as separate instructions for clarity. Instead of first changing to \n, you can also immediately insert <br/>s, of course.
Toevoeging op 06/03/2014 10:31:38:
>> p.s. ik al 3x geprobeer met <script>, <code> maar iedere keer krijg ik de code niet in een code venster. wellicht een idee omdat tussen titel en tekst waar ook B I U S link en quote staat te zetten.
[code.] en [/code.] (zonder punt).
replace all \n\r and all \r\n combos with \n alone.
replace all remaining \r with \n.
replace all \n with <br/>
with
string = string.replace(/\r?\n\r?/g, '\n');
string = string.replace(/\r/g, '\n');
string = string.replace(/\n/g,'<br/>');
Written out as separate instructions for clarity. Instead of first changing to \n, you can also immediately insert <br/>s, of course.
Toevoeging op 06/03/2014 10:31:38:
>> p.s. ik al 3x geprobeer met <script>, <code> maar iedere keer krijg ik de code niet in een code venster. wellicht een idee omdat tussen titel en tekst waar ook B I U S link en quote staat te zetten.
[code.] en [/code.] (zonder punt).
Code (php)
1
2
3
4
2
3
4
<?php
$description = nl2br($description);
$description = str_replace(array("\r","\n"), '', $description);
?>
$description = nl2br($description);
$description = str_replace(array("\r","\n"), '', $description);
?>
I have to fix it with php because the text (with line break) is in a php variabele.
Code (php)
1
2
3
2
3
<?php
print " <a href='#' onclick=\"document.getElementById('popup').style.display = 'block'; document.getElementById('popup-tekst').innerHTML='$description';\">$title</a> ";
?>
print " <a href='#' onclick=\"document.getElementById('popup').style.display = 'block'; document.getElementById('popup-tekst').innerHTML='$description';\">$title</a> ";
?>
innerHTML klinkt als javascript ;) Maar anders lijkt me nl2br() voldoende. Anders Santhe's voorbeeld.
Code (php)
1
2
3
4
2
3
4
<?php
$description = str_replace('\n', '<br />', $description);
$description = str_replace('\r', '<br />', $description);
?>
$description = str_replace('\n', '<br />', $description);
$description = str_replace('\r', '<br />', $description);
?>
al geprobeerd maar werkt niet.
nlbr werkte ook niet omdat er wel <br /> achter gezet wordt maar de regeleindes in de code blijven staan.
Ben even weg kom straks terug ....
Gewijzigd op 06/03/2014 10:39:59 door Rene Wennekes
- SanThe - op 06/03/2014 10:35:08:
Code (php)
1
2
3
4
2
3
4
<?php
$description = nl2br($description);
$description = str_replace(array("\r","\n"), '', $description);
?>
$description = nl2br($description);
$description = str_replace(array("\r","\n"), '', $description);
?>
Dit is anders dan jouw scriptje.
ff snel je 2 regels toegevoegd maar werkt niet op de linux-bak, sorry.
En hoe ziet het er dan nu uit?
Als de breaks verder al goed zijn, hoef je alleen de \n\r op te ruimen dus
$description = preg_replace("/\s+/", " ", trim($description));
edit: sorry Ivo ;) Aangepast.
Gewijzigd op 06/03/2014 11:40:48 door Michael -
'\r' zijn letterlijk 2 karakters: een backslash en de letter r.
Net als
in de eerste echo gewoon 2 tekens op het scherm zet.
Let dus op met welke quotes je gebruikt
NIET de nlbr
WELregel 3 van Santhe (\r en \n vervangen door '' NA mijn oorspronkelijke regel (PHP_EOL -> <br />
En ik geloof dat ik een boosdoen had, ik had vooraf $description door de htmlspecialchars() gehaald en dat mag schijnbaar niet.
Onder Windows was het schijnbaar geen probleem. (ja ja Linux is een strenge leermeester)
Alleen nu heb ik het probleem dat ik html waarschuwingen krijg omdat & niet verandert wordt in & .....
==update ===
probleem heeft zich nu verplaatst althans als ik op de linux-doos de volgende regels weghaal
<php
$title = htmlspecialchars($title);
$description = htmlspecialchars($description);
?>
werkt het.
Maar dan krijg ik html foutmeldingen .....
Zet ik het terug werkt het hele verhaal niet (op de linux-doos).
op de windows-doos maakt het niks uit
====== Update ========
In de database waar $description wordt uitgehaald zit vaak het ¤ teken. Dit zou het euro teken moeten zijn. Onder Windows is het ook het euroteken. Maar bij de Linux-doos werkt het dan totaal niet en wordt er in de InnerHTML niks afgedrukt .....
Gewijzigd op 06/03/2014 23:46:34 door Rene Wennekes
De eerdere post hebben wel de oplossing gebracht.
Hierdoor kwam een ander probleem aan het licht (verplaatsing probleem).
Dus ik denk dat het off-topic gaat worden.
Wellicht beter om een nieuw draadje te starten
Luitjes, bedankt voor goede richting op wijzen ...