Bekijk Volledige Versie : PHP: nieuwe alinea weergeven zoal singevoerd in formulier?
Hallo,
Net begonnen met PHP dient zich de volgende vraag aan:
Hoe kan ik voor elkaar krijgen dat tekst die via een html-form in een
MySql database wordt opgeslagen, dezelfde weergave biedt zoals ingetypt
door de gebruiker?
Als bij het invullen van het textveld een nieuwe alinea wordt gemaakt
door middel van een harde return, wordt de tekst als ik hem uit de
database haal, achter elkaar doorlopend weergegeven.
Als ik een <p> in het formulier intyp, werkt het wel. Maar als het zonder
<p> kan, heb ik dat liever.
Op PHP.net kon ik het antwoord niet vinden. Misschien moet ik mij aan de
nog bijzonder ingewikkeld uitziende 'regular expressions' gaan wagen..?
Wie zou mij op weg kunnen en willen helpen?
Alvast bedankt!
Robert
David Baakman
08/10/03, 10:00
Robert wrote:
> Hallo,
>
> Net begonnen met PHP dient zich de volgende vraag aan:
>
> Hoe kan ik voor elkaar krijgen dat tekst die via een html-form in een
> MySql database wordt opgeslagen, dezelfde weergave biedt zoals ingetypt
> door de gebruiker?
> Als bij het invullen van het textveld een nieuwe alinea wordt gemaakt
> door middel van een harde return, wordt de tekst als ik hem uit de
> database haal, achter elkaar doorlopend weergegeven.
Ja, dat klopt. Een enter in een html-form wordt gecodeerd als een \n, zo
wordt hij dus ook in de database opgeslagen, en later weer opgehaald en
weergegeven (als je in de html source kijkt zul je als het goed is ook
een regelovergang vinden).
Je wilt nu dus ipv de \n's een <br> hebben, zodat niet de html source
wordt afgebroken, maar de gerenderde tekst. Je zou nu een reguliere
expressie kunnen maken (he, jij wou het :)) die alle \n vervangt door
<br>, maar aangezien deze situatie zovaak voorkomt zit er in PHP een
standaardfunctie die precies dit doet: nl2br()
David
--
Cal42a Flatlog: http://kristo.student.utwente.nl/~flat/
Persoonlijk pagina: http://www.davidbaakman.nl/
In article <MPG.19ede13a408931a19897d1@fb1.euro.net>,
d.baakman@student.utwente.nl says...
> Robert wrote:
> > Hallo,
> >
> > Net begonnen met PHP dient zich de volgende vraag aan:
> >
> > Hoe kan ik voor elkaar krijgen dat tekst die via een html-form in een
> > MySql database wordt opgeslagen, dezelfde weergave biedt zoals ingetypt
> > door de gebruiker?
> > Als bij het invullen van het textveld een nieuwe alinea wordt gemaakt
> > door middel van een harde return, wordt de tekst als ik hem uit de
> > database haal, achter elkaar doorlopend weergegeven.
>
> Ja, dat klopt. Een enter in een html-form wordt gecodeerd als een \n, zo
> wordt hij dus ook in de database opgeslagen, en later weer opgehaald en
> weergegeven (als je in de html source kijkt zul je als het goed is ook
> een regelovergang vinden).
>
> Je wilt nu dus ipv de \n's een <br> hebben, zodat niet de html source
> wordt afgebroken, maar de gerenderde tekst. Je zou nu een reguliere
> expressie kunnen maken (he, jij wou het :)) die alle \n vervangt door
> <br>, maar aangezien deze situatie zovaak voorkomt zit er in PHP een
> standaardfunctie die precies dit doet: nl2br()
>
> David
> --
> Cal42a Flatlog: http://kristo.student.utwente.nl/~flat/
> Persoonlijk pagina: http://www.davidbaakman.nl/
>
Dag David,
Heel hartelijk bedankt voor je uitleg.
Hierdoor kwam ik op het goede spoor.
Ik heb het inmiddels opgelost d.m.v. een string replace bij de uitvoer
uit de database. Deze methode werd aangeraden op php.net.
// string replace
$bericht = str_replace("\n","<br>","$bericht");
Dit werkt perfect!
Nogmaals dank,
Robert
Maarten Wierda
08/10/03, 16:30
Robert wrote:
[...]
> Ik heb het inmiddels opgelost d.m.v. een string replace bij de uitvoer
> uit de database. Deze methode werd aangeraden op php.net.
>
> // string replace
> $bericht = str_replace("\n","<br>","$bericht");
Ik beveel je toch nl2br() aan.
<http://nl.php.net/manual/en/function.nl2br.php>
--
Cheers, Maarten Wierda
Q: What do you call someone who hangs around with musicians?
A: A drummer.
In article <bm16n2$1ai6$1@nl-news.euro.net>, moart3nAT@chello.nl says...
> Robert wrote:
>
> [...]
>
> > Ik heb het inmiddels opgelost d.m.v. een string replace bij de uitvoer
> > uit de database. Deze methode werd aangeraden op php.net.
> >
> > // string replace
> > $bericht = str_replace("\n","<br>","$bericht");
>
> Ik beveel je toch nl2br() aan.
> <http://nl.php.net/manual/en/function.nl2br.php>
>
> --
> Cheers, Maarten Wierda
>
> Q: What do you call someone who hangs around with musicians?
> A: A drummer.
>
>
Hoi Maarten,
nl2br() heb ik geprobeerd, maar de functie gaf alleen maar foutmeldingen.
Waar en hoe zou ik deze 'function' moeten inpassen? Mijn script ziet er
nu zo uit:
.................................................. ..........
<?php
// verbind met database-server en kies database
include 'connect-nieuws.php';
// haal rijen uit tabel 'gegevens' en rangschik op datum
$result = mysql_query("SELECT * FROM berichten ORDER BY datum
DESC") or die(mysql_error());
$aantal_rijen = mysql_num_rows($result);
// als er rijen gevonden zijn...
if ($aantal_rijen > 0) {
// alle rijen een voor een aflopen...
for ($i = 0; $i < $aantal_rijen; $i++)
{
$id = mysql_result($result, $i, 'id');
$datum = mysql_result($result, $i, 'datum');
$kop = mysql_result($result, $i, 'kop');
$bericht = mysql_result($result, $i, 'bericht');
$hyperlink = mysql_result($result, $i, 'hyperlink');
// string replace
$bericht = str_replace("\n","<br>","$bericht");
// ... en info uit elke rij afbeelden
echo $datum."<br>";
echo "<b>".$kop."</b><br>";
echo $bericht."<p>";
echo "<a href=>".$hyperlink."</a><p>";
// de stippellijn tussen de items
echo "<hr>";
} // einde alle rijen aflopen
} // einde als er rijen gevonden zijn
?>
.................................................. ...........
Groet,
Robert
Daniel Tryba
08/10/03, 18:30
Robert <xipe@spamcop.net> wrote:
>> Ik beveel je toch nl2br() aan.
>> <http://nl.php.net/manual/en/function.nl2br.php>
>
> nl2br() heb ik geprobeerd, maar de functie gaf alleen maar foutmeldingen.
En welke mogen dat dan wel zijn?
--
Daniel Tryba
Maarten Wierda
08/10/03, 18:30
Robert wrote:
>>>Ik heb het inmiddels opgelost d.m.v. een string replace bij de uitvoer
>>>uit de database. Deze methode werd aangeraden op php.net.
>>>
>>>// string replace
>>> $bericht = str_replace("\n","<br>","$bericht");
>>
>>Ik beveel je toch nl2br() aan.
>
> nl2br() heb ik geprobeerd, maar de functie gaf alleen maar foutmeldingen.
En welke zijn dat?
> Waar en hoe zou ik deze 'function' moeten inpassen? Mijn script ziet er
> nu zo uit:
<snip>
> // string replace
> $bericht = str_replace("\n","<br>","$bericht");
Bijv. $bericht = nl2br($bericht);
--
Cheers, Maarten Wierda
Q: What do you call someone who hangs around with musicians?
A: A drummer.
In article <MPG.19ee53c836b93ada989724@news.xs4all.nl>, xipe@spamcop.net
says...
> In article <bm16n2$1ai6$1@nl-news.euro.net>, moart3nAT@chello.nl says...
> > Robert wrote:
> >
> > [...]
> >
> > > Ik heb het inmiddels opgelost d.m.v. een string replace bij de uitvoer
> > > uit de database. Deze methode werd aangeraden op php.net.
> > >
> > > // string replace
> > > $bericht = str_replace("\n","<br>","$bericht");
> >
> > Ik beveel je toch nl2br() aan.
> > <http://nl.php.net/manual/en/function.nl2br.php>
> >
> > --
> > Cheers, Maarten Wierda
> >
> > Q: What do you call someone who hangs around with musicians?
> > A: A drummer.
> >
> >
> Hoi Maarten,
>
> nl2br() heb ik geprobeerd, maar de functie gaf alleen maar foutmeldingen.
Dag Maarten en Daniel,
Hartelijk bedankt voor de hulp.
Het werkt nu. Ik heb een fout gemaakt bij het aanroepen van nl2br: ik had
het op de verkeerde plaats gedaan, hetgeen een foutmelding gaf
betreffende de declaratie van de variabele. Het was iig geen parse-error.
Nogmaals dank!
Robert (die zich nog afvraagt waarom nl2br de voorkeur geniet...)
Daniel Tryba
08/10/03, 20:30
Robert <xipe@spamcop.net> wrote:
> Robert (die zich nog afvraagt waarom nl2br de voorkeur geniet...)
Omdat bij de invoer van een textarea niet helemaal vaststaat welke
regeleindes er worden meegestuurd, je hebt de keuze uit (gesorteerd op
kans op voorkomen):
3) \r
2) \n
1) \r\n
Je str_replace is dus niet volledig. Wat nl2br in principe doet is:
function nl2br($str)
{
return preg_replace('/(\r\n|\n|\r)/','<br />\\0',$str);
}
Maar aangezien nl2br() een gecompileerde functie is zal dat over het
sneller zijn.
--
Daniel Tryba
In article <bm1kgr$6ek$1@news.tue.nl>, news_nl.internet.www.server-
side@canopus.nl says...
> Robert <xipe@spamcop.net> wrote:
> > Robert (die zich nog afvraagt waarom nl2br de voorkeur geniet...)
>
> Omdat bij de invoer van een textarea niet helemaal vaststaat welke
> regeleindes er worden meegestuurd, je hebt de keuze uit (gesorteerd op
> kans op voorkomen):
> 3) \r
> 2) \n
> 1) \r\n
>
> Je str_replace is dus niet volledig. Wat nl2br in principe doet is:
>
> function nl2br($str)
> {
> return preg_replace('/(\r\n|\n|\r)/','<br />\\0',$str);
> }
>
> Maar aangezien nl2br() een gecompileerde functie is zal dat over het
> sneller zijn.
>
> --
>
> Daniel Tryba
>
>
Daniel,
Hartelijk dank voor deze uitleg!
Robert