Zoals de titel zegt, hoe kan ik:
Een <ENTER> laten omzetten tot een: <br />?

Ik heb nu deze string:
$bericht = eregi_replace("\r\n|\r|\n","\r\n<br />\r\n",$bericht);+

Maar die werkt niet.... In de zin van: als je een enter typt, er nog geen enter komt bij het bekijken.

Mijn script is dit:

<head>
<title>OSM Fan</title>
<link rel="stylesheet" href="../stijl8.css" type="text/css" media="screen">
<style type="text/css">
input.submit{ 
background: url('../images/registreren_but.gif') no-repeat;
width: 69px; 
height: 21px;
}
</style>
</head>

<body>
<div id="wrapper">

<div id="header"><img src="../images/osmf_logo.gif"</div>

<div id="menu">
<ul>
<li><a href="../forum">Forum</a></li>
<li><a href="../priveberichten.php">Privé berichten</a></li>
<li><a href="../inloggen.php">Inloggen</a></li>
<li><a href="http://www.pepijnstrips.nl/osm/osm/forum/?uitloggen">Uitloggen</a></li>
</ul>
</div>
<font face="Arial">
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
   if(isset($_POST['toevoegen'])){
      if(trim($_POST['topic']) == ""){
          echo 'Je bent de topic titel vergeten';
      }elseif(trim($_POST['bericht']) == ""){
          echo 'Je bent het bericht vergeten';
      }else{
          session_start();
          include('verbind.php'); 
          $topic = trim($_POST['topic']);
          $topic = wordwrap($topic, 100, "\n", true); 
          $topic = mysql_real_escape_string($topic);
          $topic = htmlentities($topic);
          $bericht = trim($_POST['bericht']);
          $bericht = wordwrap($bericht, 100, "\n", true); 
          $bericht = mysql_real_escape_string($bericht);
          $bericht = htmlentities($bericht);
	  $bericht = eregi_replace("\r\n|\r|\n","\r\n<br />\r\n",$bericht);
          $sqlcode = "INSERT INTO topic 
               (topic_titel, topic_bericht, gebruiker_id, topic_datumtijd)
                VALUES
    ('".$topic."','".$bericht."','".$_SESSION['gebruiker_id']."',now())";
          // now() gebruiken we om de huidige tijd en datum te gebruiken
          $resultaat = mysql_query($sqlcode)or die(mysql_error());
               if($resultaat){
     echo "Toevoegen Gelukt!!<BR>";
     echo "<a href='index.php'>Topic Overzicht</a>";
    }else{
     echo "Toevoegen Mislukt";
    }
        }
  }else{
   echo 'Deze actie is niet toegestaan keer <a href="?pagina=forum_overzicht">terug</a> naar het forum.';
  }
}else{
  echo 'Deze actie is niet toegestaan keer <a href="?pagina=forum_overzicht">terug</a> naar het forum.';
}
?>
<div id="footer">
&copy; 2009 Gamebasics - Opdracht door: Lars Groot - mail: [email protected]
</div>

</div>
<textarea style="width:1px;height:1px;background-color:#F5FFD8;border-left-style:none;border-right-style:none;border-top-style:none;border-bottom-style:none;" rows="1" cols="1">
<%
connect.close
set connect = nothing
forum.close
set forum = nothing
end sub
%>
</body>
</html>


Bedankt voor het kijken en helpen

Lars
(Ik heb het op internet ook gevonden, maar dat is deze dus en die begrijp ik niet....)
René schreef op 04.04.2009 11:37
Goeie morgen,

Eugh, ben effe wezen snaaien, maar de ENTER in een <textarea> bevat "\r\n" terwijl PHP_EOL alleen maar "\n" bevat.

Dus als je de ENTERS wilt vervangen voor -enter- dan moet je toch $text=ereg_replace("\r\n","-enter-",$text) doen.

$text="Regel 1\r\nRegel 2\r\nRegel 3\r\n";

$text1=ereg_replace("\r\n","-enter-",$text)
$text1 wordt dan "Regel 1-enter-Regel 2-enter-Regel 3-enter-"

$text2=ereg_replace(PHP_EOL,"-enter-",$text)
$text2 wordt dan "Regel 1\r-enter-Regel 2\r-enter-Regel 3\r-enter-"

Met andere woorden als je in dit geval PHP_EOL gebruikt blijft "\r" wel hangen.

Grts.
René



Onzin. PHP_EOL zal op de ene server \r\n opleveren en op een andere alleen \r
Wat blijft iedereen nou moeilijk doen met die ereg's, gebruik gewoon nl2br die daarvoor gemaakt is.

Voor zover ik weet is PHP_EOL, zoals Tommy zei, de linebreak van de server. En heeft dan ook niks met je client te maken. Het maakt je script alleen inzetbaar op meerdere platformen.

Maar Lars, voor jouw probleem: [php]nl2br[/php] dus, en inderdaad pas als je het op het scherm zet, en dus niet als je het in de database zet.
WillemJan Z schreef op 04.04.2009 12:29
Wat blijft iedereen nou moeilijk doen met die ereg's, gebruik gewoon nl2br die daarvoor gemaakt is.

Voor zover ik weet is PHP_EOL, zoals Tommy zei, de linebreak van de server. En heeft dan ook niks met je client te maken. Het maakt je script alleen inzetbaar op meerdere platformen.

Maar Lars, voor jouw probleem: [php]nl2br[/php] dus, en inderdaad pas als je het op het scherm zet, en dus niet als je het in de database zet.


PHP_EOL is een constant dat te stand komt door het OS dat gebruikt wordt. Op Linux is het wat anders dan op Windows, wat zo'n zijn beurt weer anders is dan OSx, etc.. (geen ideen waarom het anders is).

Maar jullie snappen nog niet wat ik met dat andere bedoel. Neem dit bericht dat ik typ hier, daar zitten enters in. Stel Windows doet dat met /n/r en ik neem even aan de PHP Hulp op een Linux server draait. Als je dan gaat replacen op PHP_EOL, wordt de SYSTEEMSTANDAARD gepakt en niet alle standaarden. Snappen jullie het nou? Dus als je input van meerdere platforms kan komen, niet PHP_EOL gebruiken. Dit moet je gebruiken in bijv. een mail of om je code netjes te echoën.
Okay, ik wil liever niet PHP_EOL gebruiken, maar gewoon: preg_replace().

Dit lukt maar niet, het ziet er nu dus zo uit:
(heb het gedaan met reactie nu.)


<?php
include('verbind.php'); 
if(trim($_POST['reactie_bericht']) == ""){ 
   echo 'Je bent vergeten een reactie in te tikken';
}else{
   session_start();
   $reactie_bericht = trim($_POST['reactie_bericht']);
    // spaties eraf (eind en begin)
   $reactie_bericht = wordwrap($reactie_bericht, 100, "\n", true); 
   // max 100 tekens per regel weetje nog?
   $reactie_bericht = mysql_real_escape_string($reactie_bericht);
   // een slash voor sql gevoelige tekens plaatsen
   $reactie_bericht = htmlentities($reactie_bericht);
   $reactie_bericht = preg_replace("\r\n|\r|\n", "<br />", $reactie_bericht);
   // ongewenste html codes 'beveiligen'
   $sql = "INSERT INTO reactie 
             (topic_id, gebruiker_id, reactie_bericht, reactie_datumtijd)
             VALUES
             (".trim($_POST['topic_id']).",'".$_SESSION['gebruiker_id']."','".$reactie_bericht."', now())";
   $resultaat = mysql_query($sql) or die(mysql_error());
     if(mysql_affected_rows() > 0){
       // met mysql_affected_rows krijg je een getal terug..
       // dit getal is het aantal rijen waar mysql de insert into
       // query op heeft uitgevoerd.. in ons geval altijd 1 met deze query
       // dus als de output van mysql_affected_rows hoger als 0 is (1 dus)
       // dan gaat hij verder in het script
           $nummer = $_POST['topic_id'];
            header("Location:  index.php?bekijktopic=$nummer");
            }else{
              echo 'toevoegen mislukt';
            }
}
?> 


Het gaat om deze regel:
$reactie_bericht = preg_replace("\r\n|\r|\n", "<br />", $reactie_bericht);

Dit werkt NIET, want als ik een bericht typ met (enters), dan komt er wel een enter in de mySQL, maar geen <br />, en dat moet, enters moeten worden vervangen door <br />.

Hoe krijg ik dit dan werkend?
Gvd, geen HTML in je database pleuren man. Hoe vaak wil je dit horen?

En doe het eens zo:
preg_replace(array("\r\n", "\n", "\r"), "<br />", $text);
Tommy! Weet je wel waar je het allemaal over hebt?

Het maakt geen bal uit op welke OS je het bericht typt. Het bericht wordt op de website (Linux) opgestuurd, wordt op de server (Linux) verwerkt en wordt in de database (Linux) opgeslagen. Het boeit dus helemaal geen ene flikker of je op een Windows PC, of op een FreeBSD PC, of een Mac zit.

Dit allemaal gebeurt op de server!

EDIT: René. <textarea> bevat NIET per definitie \r\n en PHP_EOL bevat NIET per definitie \n!!! Waarom zitten jullie toch allemaal jullie zin door te drijven?

Op een Linux server bevat <textarea> \r (fictief/als voorbeeld) en PHP_EOL ook \r. Op een Windows server bevat <textarea> \n\r (fictief/als voorbeeld) en PHP_EOL ook \n\r. Een client die bijv op een Linux website als zijnde Windows wat opstuurt geeft dan niet \n\r door maar \r, omdat de website op de Linux server staat.
Dit maakt html van de geposte tekst uit een textarea:
nl2br(htmlentities(stripslashes($_POST['textarea'])))
Tommy, dat was precies wat ik dus ook bedoelde ;)

En GaMer13, blijkbaar weet jij niet waar je het over hebt. Want dat HTML form staat niet op de server. Maar op de computer van de client. Doe eerst maar even lezen wat het verschil tussen serverside en clientside is. Daarna mag jij je er weer mee bemoeien.

De inhoud van dat formulier komt na het versturen pas op de server. Als je het nog aan het typen ben, heeft de server er geen bal mee te maken, die weet niet eens dat je aan het typen bent.

En Lars, voor de 6e keer ofzo, nl2br gebruiken als je het weer op je scherm wil krijgen! Als je het in je database stopt, moet je er niet eerst HTML van maken, alleen beveiligen, zoals bv. mysql_real_escape_string.
to replace all linebreaks to <br />
the best solution (IMO) is:

<?php
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return $string;
}
?>

because each OS have different ASCII chars for linebreak:
windows = \r\n
unix = \n
mac = \r

works perfect for me


Gevonden op php.net.

Deze unctie werkt met alle linebreaks.
nl2br ook gewoon, die is er voor gemaakt :S

Reageren