BBcodes aus Text entfernen, wie geht das?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

BBcodes aus Text entfernen, wie geht das?

Beitrag von Helmut »

Hallo,

wie kann ich die BBcodes aus einem Text (Posting) bei der Anzeige entfernen?

Im konkreten Fall verwende ich ein Forum mit einem Thema und zig Antworten dazu als Newsticker. Bei der normalen Anzeige des ganzen Textes sollen die BBcodes beibehalten bleiben, aber auf einer Vorschau z.B. 250 Zeichen lang, sollen die BBcodes herausgefiltert werden. Ich habe bis jetzt noch nichts gefunden, das mir weitergeholfen hat.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Christian_W
Ehemaliges Teammitglied
Beiträge: 5703
Registriert: 26.02.2004 00:09

Beitrag von Christian_W »

Schau mal in die search.php da wird genau das gemacht.
nd wenn Du die BBCodes behalten willst schau Dir auch mal das hier an: MOD:bbcode_in_search

Gruß Christian
---
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Christian,

danke dir für den Link, das werde ich mir mal genauer anschauen. Ich habs jetzt mit "preg_replace()" gemacht, aber wie bekomme ich einen beliebigen Text mit ggf. Sonderzeichen zwischen bestimmten BBcodes wie z.B.

Code: Alles auswählen

 [center] Beispieltext mit (Sonderzeichen)[/center]
heraus?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo,

so ich habs jetzt hinbekommen, mein Code sieht so aus:

Code: Alles auswählen

.....
$limit = 3;
$short_to = 300;

$sql = 'SELECT p.post_subject, p.post_text, p.post_id
	FROM ' . POSTS_TABLE . ' p
	WHERE p.topic_id = 21
	ORDER BY p.post_id DESC
	LIMIT ' . $limit;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
	$row['post_text'] = preg_replace('/\:[0-9a-z\:]+\]/si', ']', $row['post_text']);	
	$zeichen1[0] ='/\[([a-z])\]/';
	$zeichen1[1] ='/\[\/?([a-z])\]/';	
	$zeichen1[2] ='/\[(center)\]\[(size)=[0-9][0-9][0-9]\](.*?)\[\/?(size)\]\[\/?(center)\]/si';	
	$row['post_text'] = preg_replace($zeichen1, '', $row['post_text']);	
	$row['post_text'] = ( utf8_strlen($row['post_text']) > $short_to + 5 )? (utf8_substr($row['post_text'],0,$short_to) . '...') : ($row['post_text']);
	$template->assign_block_vars('recenttopic2row', array(
			'POST_TITLE'		=> censor_text($row['post_subject']),
			'POST_TEXT'		=> censor_text($row['post_text']),
			'U_NEWS_POST'		=> append_sid("{$phpbb_root_path}svisuite/nachrichten.$phpEx", 'n=' . $row['post_id']),
	));
}
$db->sql_freeresult($result);
....
Damit werden alle BBcodes samt Text was sich zwischen "[center][size=***]" und "[/size][/center]" befindet, gelöscht. Vielleicht hat noch jemand eine Idee, den Code noch etwas zu optimieren.

Jetzt habe ich noch das Problem mit den Links wenn sich z.B. ein Link im Text befindet. Der wird ja in einen anklickbaren Link umgesetzt, aber wenn der Link dann nach einer bestimmten Länge des ausgegebenen Textes zwischen drinnen abgeschnitten wird, dann kommt es zu Problemen mit der Formatierung des Textes. Wie kann ich das Verhindern, dass der Link dann nicht abgeschnitten, sondern ganz angezeigt wird?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Antworten

Zurück zu „Coding & Technik“