webForumDet fria alternativet

Radbrytning och inte radbrytning

PHPur PHP

11 svar · 460 visningar · startad av nkrantz

nkrantzMedlem sedan apr. 2002830 inlägg
Frågan#1

Tänk att ni har ett textfält där en användare kan skriva in artiklar, i de flesta fallen så är det simpel HTML som används, dvs, <b><i> etc.

Men ibland så vill användaren göra mer komplexa saker, tex lägga in tables och kanske en <textarea>. Då blir det ju en massa strul när man ska formatera datan från databasen med nl2br.

För då blir det ju en <br /> efter varje radbrytning man gör när man skapar tabellen. I en <textarea> blir det också fel eftersom den inte tar med <br /> taggar...

Hur löser man det på ett smidigt sätt? Så att vissa delar görs till nl2br och andra inte... I samma artikel?

// Nippe

nkrantzMedlem sedan apr. 2002830 inlägg
#2

Någon som har någon smidig idé?

xcalibrateMedlem sedan aug. 2002136 inlägg
#3

tänker du på \n ? fattade inte riktigt frågan =/

nkrantzMedlem sedan apr. 2002830 inlägg
#4

Misstänkte att det kunde bli missförstånd ;)

Jo, det är så att jag postar information från ett formulär in i databasen. När jag sedan presenterar den här informationen så kör jag nl2br på allt. Och det funkar jättebra så länge informationen inte innehåller exempelvis tables. Då blir det istället så här:

<table><br>
<tr><br>
<td><br>

Och det var ju inte direkt det jag ville ha. Det funkar iofs om man tar bort radbrytningarna så att det blir <table><tr><td>, men om jag nu istället skulle vilja ha en textarea i det som jag postar och vill ha radbrytningar inuti denna textarea så måste jag ju visa det i det jag postar. Men när man hämtar ut det från databasen så visas det som <br /> i textarean, vilket jag naturligtvis inte vill.

Vet inte om du förstår mig bättre... Men jag vill alltså att enbart den text jag skriver in skall vara nl2br, inte min html kod.... typ....

DufferMedlem sedan mars 2003429 inlägg
#5

det där låter svårt att få ihop med enbart nl2br tyvärr =/

Jag hade nog försökt lösa det genom att utveckla ett eget "html språk" t.ex. som lunarstorm har till sina krypin om du har varit inne där.
där kan du typ skriva <streck> så får du en egentlig <hr> på ditt krypin.

Gör t.ex. <start_tabell> till <table> (med replace), på detta sättet kommer du kunna kontrollera så det blir exakt som man vill ha det, du kan t.ex. innan du skriver det i databasen kontrollera så det inte är någon /n efter <start_tabell> och om det är det kan du radera det.

Sen borde det bara vara att köra funktionen som vanligt när du hämtar datan ur databasen med din nl2br

nkrantzMedlem sedan apr. 2002830 inlägg
#6

Jo, jag tänkte att det nog skulle vara det smartaste, ville dock se era tankar...

Ska testa lite :)

// Nippe

nkrantzMedlem sedan apr. 2002830 inlägg
#7

Skall börja knåpa på det här nu. Behöver lite hjälp med hur man går tillväga rent praktiskt.

Jag hämtar en artikel från databasen. Jag kommer i min artikel ha [NOBR] och [/NOBR] i den texten som jag inte vill att br skall påverka. Sedan vill jag söka reda på <br> och <br /> samt <br/> och ersätta detta med \r\n

Hur bygger jag denna funktion?

nkrantzMedlem sedan apr. 2002830 inlägg
#8

hm...

Okej, följande kod funkar till viss del:

function dbFormFix($text)
	{
		$text = preg_replace( "'\[NOBR\](.*?)\[/NOBR\]'is",'hej\\1',$text);

		echo $text;
	}

Den skriver ut hej innan texten jag hade innanför [NOBR]... Vad jag nu vill göra är att anropa en funktion i replacement delen. Och jag har läst och kollat och man skall tydligen använda sig av \e för att kunna tolka det som php-kod. Problemet är att om jag enbart använder mig av e så hittar den inte min text, jag måste således ha i och s, men då vill inte e vara med.

Någon som vet hur jag skall göra?

// Nippe

//edit: Fixade backslashs

nkrantzMedlem sedan apr. 2002830 inlägg
#9

Lösningen...

function br2nl($text)
	{
		$text = str_replace("<br />", "", $text);
		$text = str_replace("<br\>", "", $text);
		$text = str_replace("<br>", "", $text);
		
		return $text;
	}
	
	function dbFormFix($text)
	{
		$text = preg_replace( "'\[NOBR\](.*?)\[/NOBR\]'se",'br2nl("\\1")',$text);
		
		echo $text;
	}
MeleaMedlem sedan juli 20033 147 inlägg
#10

Hejsan

Jag försökte på samma lösning men får det inte att fungera.
Såhär ser det ut:

function br2nl($text) {
	$text = str_replace("<br />", "", $text);
	$text = str_replace("<br\>", "", $text);
	$text = str_replace("<br>", "", $text);		
	return ($text);
}

function dbFormFix($text) {
	$text = preg_replace( "'\[NOBR\](.*?)\[/NOBR\]'se",'br2nl("\\1")',$text);
	return ($text);
}

$SQL = mysql_query("SELECT * FROM features") or die (mysql_error());
while($objRS = mysql_fetch_array($SQL)) {
	
	echo nl2br(br2nl(dbFormFix($objRS['text_full'])));

}
nkrantzMedlem sedan apr. 2002830 inlägg
#11

Nope, nu kör du br2nl två gånger, ska du inte göra! Funktionsanropet ser ut såhär:

echo dbFormFix(nl2br($objRS['text_full']));

edit: Funktionen br2nl anropas ju inifrån preg_replacen...

Lycka till!

MeleaMedlem sedan juli 20033 147 inlägg
#12

Så pass ;) Såg inte att br2nl anropades inuti dbFormFix funktionen.

Stort tack!

136 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
134 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)