Archief - PHP: eregi_replace("<br>","\n", $stuff) vraagje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

iamdesign

Legacy Member
Hoy allemaal,

Klein vraagje (wel redelijk vervelend :p) over eregi_replace("<br>","\n", $stuff).

Ik heb dus een script geschreven dat je artikels over boek kan posten.

Nu in mijn book_add.php doe ik het vlg om ook de opmaak mee te nemen in de database:

PHP:
// Functions to clean up html tags and secure for sql injections
			function formatStringForDatabase($string) 
			{ 
     			if (get_magic_quotes_gpc() == 1) 
     			{ 
         			return htmlspecialchars(strip_tags($string));  
     			} 
     			else 
     			{ 
         			return addslashes(htmlspecialchars(strip_tags($string))); 
     			} 
 			}
		
			// Prepare variables
			$author = formatStringForDatabase($author);
			$title = formatStringForDatabase($title);
			$extraInfo = eregi_replace("\n","<br>",$extraInfo); 
			
			$verzendExtraInfo = formatStringForDatabase($extraInfo);
			
			// Make query
			mysql_query("INSERT INTO eann_book (author, title, extrainfo, photo) VALUES (\"$author\", \"$title\", \"$verzendExtraInfo\", \"$img_path\")") or die(mysql_error());

Als ik in mijn database kijk word ook alles mooi met <br> afgebakend.

Nu heb ik ook een functie "edit book" geschreven, zodat men stuff van het boek eventueel kan editen.

Hierbij wordt de tekst opgehaald uit de DB, in een tekstarea gesmeten met deze code:

PHP:
// Result found => put everything in an array
				$rij = mysql_fetch_assoc($result);
				
				// Make more comfortable variables
				$author = $rij['author'];
				$title = $rij['title'];
				$extraInfoOphaal = stripslashes($rij['extrainfo']);
				
				$extraInfo = eregi_replace("<br>","\n", $extraInfoOphaal);

Ook dit doet hij goed (dus in de textarea komt de stuff met de juiste opmaak)


Maar nu als ik die tekst aanpas en weer op submit drukt, dan wordt er nix meer van de opmaak meegezonden ook al doe ik :

PHP:
// Functions to clean up html tags and secure for sql injections
			function formatStringForDatabase($string) 
			{ 
     			if (get_magic_quotes_gpc() == 1) 
     			{ 
         			return htmlspecialchars(strip_tags($string));  
     			} 
     			else 
     			{ 
         			return addslashes(htmlspecialchars(strip_tags($string))); 
     			} 
 			}
		
			// Prepare variables
			$author = formatStringForDatabase($author);
			$title = formatStringForDatabase($title);
			$extraInfo = eregi_replace("\n","<br>",$extraInfo); 
			
			$verzendExtraInfo = formatStringForDatabase($extraInfo);
			
			// Make query
			$sql = "UPDATE eann_book SET author='".$author."', title='".$title."', extrainfo='".$verzendExtraInfo."' WHERE bookid='".$bookID."'";
			mysql_query($sql) or die("There was a problem while processing your request, please contact the <a href='mailto:[email protected]'>webmaster</a>...");

Wat compleet hetzelfde is als bij het adden...maar toch vertikt hij het van de \n's om te zetten naar <br> :(

en dit sucked wel redeiljk zwaar

is er iets dat ik over het hoofd zie???

Bedankt alvast

iamdesign

Legacy Member
Ik heb mijn code om het in de database te steken veranderd naar

PHP:
// Replace newlines by <br />
			function nl2brStrict($text, $replacement = '<br />')
			{
			   return preg_replace("((\r\n)+)", trim($replacement), $text);
			}
		
			// Prepare variables
			$author = formatStringForDatabase($author);
			$title = formatStringForDatabase($title);
			$verzendExtraInfo = formatStringForDatabase($extraInfo);
			
			$verzendExtraInfo = nl2brStrict($verzendExtraInfo);

Dit werkt alleszinds zie ik in mijn DB, maar alleen het ophale en in textarea steken lukt nog nie (hij zet nog steeds alles op dezelfde lijn) :@

hiervoor gebruik ik vlg code

PHP:
//<br /> to newlines
				function br2nl($text)
				{
					   return  preg_replace('/<br\\s*?\/??>/i', '', $text);
				}
				
				// Make more comfortable variables
				$author = $rij['author'];
				$title = $rij['title'];
				$extraInfoOphaal = $rij['extrainfo'];
				
				
				$extraInfo = stripslashes($extraInfoOphaal);
				$extraInfo = br2nl($extraInfo);

als ik die

return preg_replace('/<br\\s*?\/??>/i', '', $text);

verander naar

return preg_replace('/<br\\s*?\/??>/i', '\n', $text);

Komen er allemaal \n'en in mijn textarea...wat wil zegge dat de preg_replace klopt...maja em doet het wel nie :(

Tyfius

Legacy Member
Volgens mij heb je het jezelf nodeloos ingewikkeld gemaakt.
Ikzelf werk zoals reeds aangehaald met een eenvoudiger nl2br(); om de data af te drukken waar nodig. In de database blijft die dan met \n zitten.

iamdesign

Legacy Member
ja maar als ge da in een tekstarea afdrukt dan krijgde overal


Code:
hey<br />
<br />
dit<br />
<br />
zijn<br />
<br />
allemaal<br />
<br />
enters<br />
<br />

en das nu nie echt handig, dus moet ik iets hemme dat die <br />'s omzet in newline characters

maar da vinnek dus nie :)

EDIT: ok ik heb het kunnen oplossen...en het is echt ongelofelijk dat ik het heb gevonden, maar je moet dus bij die

return preg_replace('/<br\\s*?\/??>/i', '\n', $text);

doubele quotes gebruiken :|

dit wordt dus
return preg_replace('/<br\\s*?\/??>/i', "\n", $text);


..amai daar gaat de logica :p

omfg

Legacy Member
zet gewoon je inhoud in de database zonder enige nl2br of zoiets erop, en haal het er ook zo uit.
in je textarea moet je er geen nl2br opzetten..

iamdesign

Legacy Member
omfg...je hebt omfg gelijk :p

en met smarty heb je nl2br modifier zie ik nu, ....sighhhhhhh zoveel tijd daar nu aan verspeeld :d
ahja kzallet nie vergete nu ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan