Tutorial.Parsing text

Database fields
phpBB3 uses the following database fields where BBCode is allowed (forum description, forum rules, post content, ...):
 * foo - the text itself
 * foo_bbcode_uid - a randomly generated unique identifier to mark the bbcodes identified by the first pass encoding (which uses regular expressions) so they can be replaced using the quicker str_replace in the second pass.
 * foo_bbcode_bitfield - a bit field containing the information which bbcode is used in the text so only the relavant ones need to be loaded from the database.
 * foo_options - a bit field containing the information whether bbcode, smilies and magic urls are enabled (OPTION_FLAG_BBCODE, OPTION_FLAG_SMILIES and OPTION_FLAG_LINKS). Sometimes you will find this separated into enable_bbcode, enable_smilies and enable_magic_url

column names vary from table to table.

Inserting text to the DB
$text = utf8_normalize_nfc(request_var('text', '', true)); $uid = $bitfield = $options = ''; // will be modified by generate_text_for_storage $allow_bbcode = $allow_urls = $allow_smilies = true; generate_text_for_storage($text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);

$sql_ary = array(   'text'              => $text,    'bbcode_uid'        => $uid,    'bbcode_bitfield'   => $bitfield,    'bbcode_options'    => $options, );

$sql = 'INSERT INTO '. YOUR_TABLE. ' ' . $db->sql_build_array('INSERT', $sql_ary); $db->sql_query($sql);

The above method uses the bbcode options database field which is used in many places instead of enable_smiles, enable_bbcode and enable_magic_url

Here is how to insert it into the database using the enable_smilies, enable_bbcode and enable_magic_url tables $text = utf8_normalize_nfc(request_var('text', '', true)); $uid = $bitfield = $options = ''; // will be modified by generate_text_for_storage $allow_bbcode = $allow_urls = $allow_smilies = true; generate_text_for_storage($text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);

$sql_ary = array(   'text'              => $text,    'bbcode_uid'        => $uid,    'bbcode_bitfield'   => $bitfield,    'enable_bbcode'     => $allow_bbcode,    'enable_magic_url'  => $allow_urls,    'enable_smilies'    => $allow_smilies, );

$sql = 'INSERT INTO '. YOUR_TABLE. ' ' . $db->sql_build_array('INSERT', $sql_ary); $db->sql_query($sql);

Displaying text downloaded from DB
This example uses the bbcode_options field which is used in forums and groups description parsing: $sql = 'SELECT text, bbcode_uid, bbcode_bitfield, bbcode_options FROM '. YOUR_TABLE; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result);

$text = generate_text_for_display($row['text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $row['bbcode_options']);

echo $text;

The next one uses the enable_bbcode, enable_smilies and enable_magic_url flags which can be used instead of the above method and is used in parsing posts: $sql = 'SELECT text, bbcode_uid, bbcode_bitfield, enable_bbcode, enable_smilies, enable_magic_url FROM '. YOUR_TABLE; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result);

$row['bbcode_options'] = (($row['enable_bbcode']) ? OPTION_FLAG_BBCODE : 0) + (($row['enable_smilies']) ? OPTION_FLAG_SMILIES : 0) + (($row['enable_magic_url']) ? OPTION_FLAG_LINKS : 0); $text = generate_text_for_display($row['text'], $row['bbcode_uid'], $row['bbcode_bitfield'], $row['bbcode_options']);

echo $text;

Generating text for editing
$sql = 'SELECT text, bbcode_uid FROM '. YOUR_TABLE; $result = $db->sql_query_limit($sql, 1); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result);

decode_message($row['text'], $row['bbcode_uid']);

echo $row['text'];

The database options to use for the fields
 `bbcode_bitfield` varchar(255) collate utf8_bin NOT NULL default '', `bbcode_uid` varchar(8) collate utf8_bin NOT NULL, `bbcode_options` mediumint(4) collate utf8_bin NOT NULL, 