Tutorial.Parsing text
From phpBB Development Wiki
Contents
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.
Parsing text with BBCodes, smilies etc.
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,
See Also