2014-02-21 3 views
7

Ищет анализ кода BB на PHP с использованием функций PHPBB3. Я получил это далеко:Анализ кода BB для PHPBB3

<?php 
    include_once("../../forum/includes/functions_content.php"); 

    $text = "[b]bold text here[/b] not bold here"; 
    $uid = $bitfield = $options = ''; 

    echo("parsing"); 
    echo generate_text_for_storage($text, $uid, $bitfield, $options, true, true, true); 
    echo("finished"); 
?> 

Однако вторит parsing но не продолжается после этого. Я ожидаю, что выход будет осуществляться по линиям:

<b>bold text here</b> not bold here 

Любая помощь очень ценится!

Редактировать

Нет ответов не работает до сих пор. Я ищу страницу Standalone php, которая превращает данную строку кода BB в строку HTML с использованием парсера BBCode PHPBB3.

+0

попробуйте присвоить 'generate_text_for_storage' var, чтобы вы могли' var_dump' его. Это может показать вам, что происходит – Brainscrewer

+0

@Brainscrewer var_dump ничего не показывает (я предполагаю, что он не работает при вызове функции) –

+0

Временно добавьте несколько строк дампа/эха в функцию, чтобы увидеть, где и почему она не работает? – naththedeveloper

ответ

2

Генерация BBCodes является 2 ступенчатыми процессами, Вы делаете первый шаг (первый проход)

generate_text_for_storage сделано для хранения BBCode в базе данных, сохраненный в BBcode, потому что вы можете изменить BBCode без необходимости для повторной обработки старых сообщений.

Другая функция ваш ищет является

generate_text_for_display

PHPBB имеет вики листинг вещи, как этот

https://wiki.phpbb.com/Tutorial.Parsing_text

https://wiki.phpbb.com/Generate_text_for_display

являются страницы вашего ищут.

В качестве альтернативы вы можете использовать класс BBcode прямой, код, который также работает

$bbcode = new bbcode(base64_encode($bbcode_bitfield)); 
$bbcode->bbcode_second_pass($post_text, $posts_row['bbcode_uid'], $posts_row['bbcode_bitfield']); 
$post_text = smiley_text($post_text); 
$post_text = censor_text($post_text); 

Вам потребуется

за последний работать

Полный код для 2 функций метод с выходом

<?php 
ini_set('display_errors', 1); 
define('IN_PHPBB', true); 
$phpbb_root_path = './forum/'; 
$phpEx = "php"; 
include($phpbb_root_path . 'common.' . $phpEx); 
include($phpbb_root_path . 'includes/bbcode.' . $phpEx); 
include($phpbb_root_path . 'includes/functions_display.' . $phpEx); 

// Start session management 
$user->session_begin(); 
$auth->acl($user->data); 
$user->setup('viewforum'); 


$text = "[b]bold text here[/b] not bold here"; 

$uid = $bitfield = $options = ''; 
echo("parsing"); 
echo generate_text_for_storage($text, $uid, $bitfield, $options, true, true, true); 
var_dump($text); 
$text = generate_text_for_display($text, $uid, $bitfield, OPTION_FLAG_BBCODE); 
var_dump($text); 
echo("finished"); 

который выводит

parsing 
string '[b:1vhn6cjx]bold text here[/b:1vhn6cjx] not bold here' (length=53) 
array (size=1) 
    0 => int 1 
string '<span style="font-weight: bold">bold text here</span> not bold here' (length=67) 
finished 

преобразование BB код представляет собой процесс, 2 шага, чтобы дать гибкость как для пользователя и плакат, чтобы настроить вид поста. Вам нужно будет обрабатывать текст первой с первой функцией, а затем обработать второй раз, чтобы получить HTML

+0

Изменение для создания для отображения также не работает, также ваш альтернативный код также не работает по какой-то причине! (Я не могу получить никаких ошибок!) –

+0

Положите какой-нибудь рабочий код в ответ с ошибками отображения, поэтому, надеюсь, вы сможете увидеть больше, если ваш не работает – exussum

+0

@TomGullen любая удача с этим? – exussum

0

Чтобы сделать это самостоятельно, вы можете использовать регулярные выражения, чтобы найти теги BBCode и захватить то, что находится между двумя тегами.

Вот пример с жирным текстом:

$text = "[b]bold text here[/b] not bold here but still [b]bold here[/b]"; 

$pattern = '/\[b\](.*?)\[\/b\]/i'; 
$replacement = '<b>$1</b>'; 
echo preg_replace($pattern, $replacement, $text); 

Выход: <b>bold text here</b> not bold here but still <b>bold here</b>.

Дополнительная информация о preg_replace.

Вы можете заметить маркер *?, чтобы сделать захват ленивым и не жадным, таким образом работая с несколькими тегами в одной строке.

Это регулярное выражение также будет работать (после небольшого изменения) курсивом, подчеркнутым текстом. Но вам придется писать разные для ссылок, списков или изображений. Вы можете найти список тегов BB-кода на wikipedia: BB Code tags. На той же странице вы найдете пример кода HTML для каждого типа тега, который действительно поможет вам!

Теперь существует библиотека разбора PHP BBCode. Это сэкономит вам много времени и, вероятно, будет более результативным, чем использование регулярных выражений.

Вот два примера библиотек: PECL и PEAR.

+0

Спасибо, но я хочу использовать PHP-код PHPBB, поэтому мне не нужно писать свои собственные/поддерживать его! –

+1

Кроме того, если вы использовали эту версию, и я знаю, что это всего лишь пример, мы можем использовать тег img –

0

Вот как я получил рабочую версию, основанную на вашем публикуемую код ...

1) Установленное PHPbb3 на моем локальном веб-сервере ... Это: XAMPP, PHP 5.3.18 на окнах XP ,

2) Проверено, что все это работает, создавая форумы и отправляя сообщения как «гость».

Все нормально, до сих пор ...

Затем я отредактировал мой «index.php» файл «включить» все стандартные «PHPbb3» вещи, но удалил весь код дисплея.

Затем я включил ваш код и проверял каждый шаг.

<?php 
/** 
* 
* @package phpBB3 
* @version $Id$ 
* @copyright (c) 2005 phpBB Group 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
* 
*/ 

/** 
* @ignore 
*/ 
define('IN_PHPBB', true); 
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; 
$phpEx = substr(strrchr(__FILE__, '.'), 1); 
include($phpbb_root_path . 'common.' . $phpEx); 
include($phpbb_root_path . 'includes/functions_display.' . $phpEx); 

echo '<br />----------------------------------------------<br />'; 
echo "Hello from PHPBB3! Start<br />"; // show starting 

// note that multibyte support is enabled here 
$sampleText = "[b]bold text here[/b] not bold here"; 
var_dump($sampleText . ' : '. __FILE__ . __LINE__); 


$myNormalizeText = utf8_normalize_nfc($sampleText); 

var_dump($myNormalizeText .' : '. __FILE__. __LINE__); 

// variables to hold the parameters for submit_post 
$uid = $bitfield = $options = ''; 

echo("<br />parsing Start<br/>"); 
    generate_text_for_storage($myNormalizeText, $uid, $bitfield, $options, true, true, true); 

    var_dump($myNormalizeText .' :'. __FILE__. __LINE__); 
    var_dump($uid .' :'. __FILE__. __LINE__); 
echo("<br />Parsing finished<br/>"); 

echo "<br />Goodbye from PHPBB3! END"; 
echo '<br />----------------------------------------------<br />'; 
?> 

Выход:

---------------------------------------------- 
Hello from PHPBB3! Start 

string '[b]bold text here[/b] not bold here : P:\developer\xampp\htdocs\phpBB3\index.php25' (length=82) 

string '[b]bold text here[/b] not bold here : P:\developer\xampp\htdocs\phpBB3\index.php33' (length=82) 


parsing Start 

string '[b:vkw79dbw]bold text here[/b:vkw79dbw] not bold here :P:\developer\xampp\htdocs\phpBB3\index.php41' (length=99) 

string 'vkw79dbw :P:\developer\xampp\htdocs\phpBB3\index.php42' (length=54) 


Parsing finished 

Goodbye from PHPBB3! END 
------------------------ 

кажется, делать, как просили.

+0

Привет, Райан, он, похоже, не работает вообще для меня, также ваше решение, похоже, не помещает HTML-выход? –

+0

О, я даже запускаю вышеуказанный код через веб-сервер! Это поставляемый файл index.php, как указано выше! –

0

Этот код работал для меня: не 100% точный, но это помогает: Благодаря https://gist.github.com/neo22s/2584465

, с незначительными изменениями

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT post_id, post_text from phpbb_posts"; //adjust phpbb_ 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     $converted_post_text=tohtml($row['post_text']); 
     $post_id=$row['post_id']; 
     $updated_sql="UPDATE phpbb_posts SET post_text='".$converted_post_text."' WHERE post_id='".$post_id."'"; 
     $conn->query($updated_sql); 
     echo $post_id . 'Done '. $converted_post_text; 
     echo '<br>'; 

     sleep(1); 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 





function tohtml($text,$advanced=true,$charset='utf-8'){ 

     //special chars 
     $text = htmlspecialchars($text, ENT_QUOTES,$charset); 

     /** 
     * This array contains the main static bbcode 
     * @var array $basic_bbcode 
     */ 
     $basic_bbcode = array(
           '[b]', '[/b]', 
           '[i]', '[/i]', 
           '[u]', '[/u]', 
           '[s]','[/s]', 
           '[ul]','[/ul]', 
           '[li]', '[/li]', 
           '[ol]', '[/ol]', 
           '[center]', '[/center]', 
           '[left]', '[/left]', 
           '[right]', '[/right]', 
     ); 

     /** 
     * This array contains the main static bbcode's html 
     * @var array $basic_html 
     */ 
     $basic_html = array(
           '<b>', '</b>', 
           '<i>', '</i>', 
           '<u>', '</u>', 
           '<s>', '</s>', 
           '<ul>','</ul>', 
           '<li>','</li>', 
           '<ol>','</ol>', 
           '<div style="text-align: center;">', '</div>', 
           '<div style="text-align: left;">', '</div>', 
           '<div style="text-align: right;">', '</div>', 
     ); 

     /** 
     * 
     * Parses basic bbcode, used str_replace since seems to be the fastest 
     */ 
     $text = str_replace($basic_bbcode, $basic_html, $text); 

     //advanced BBCODE 
     if ($advanced) 
     { 
      /** 
      * This array contains the advanced static bbcode 
      * @var array $advanced_bbcode 
      */ 
      $advanced_bbcode = array(
            '#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.+)\[/color\]#Usi', 
            '#\[size=([0-9][0-9]?)](.+)\[/size\]#Usi', 
            '#\[quote](\r\n)?(.+?)\[/quote]#si', 
            '#\[quote=(.*?)](\r\n)?(.+?)\[/quote]#si', 
            '#\[url](.+)\[/url]#Usi', 
            '#\[url=(.+)](.+)\[/url\]#Usi', 
            '#\[email]([\w\.\-][email protected][a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]*\.\w{1,4})\[/email]#Usi', 
            '#\[email=([\w\.\-][email protected][a-zA-Z0-9\-]+\.?[a-zA-Z0-9\-]*\.\w{1,4})](.+)\[/email]#Usi', 
            '#\[img](.+)\[/img]#Usi', 
            '#\[img=(.+)](.+)\[/img]#Usi', 
            '#\[code](\r\n)?(.+?)(\r\n)?\[/code]#si', 
            '#\[youtube]http://[a-z]{0,3}.youtube.com/watch\?v=([0-9a-zA-Z]{1,11})\[/youtube]#Usi', 
            '#\[youtube]([0-9a-zA-Z]{1,11})\[/youtube]#Usi' 
      ); 

      /** 
      * This array contains the advanced static bbcode's html 
      * @var array $advanced_html 
      */ 
      $advanced_html = array(
            '<span style="color: $1">$2</span>', 
            '<span style="font-size: $1px">$2</span>', 
            "<div class=\"quote\"><span class=\"quoteby\">Disse:</span>\r\n$2</div>", 
            "<div class=\"quote\"><span class=\"quoteby\">Disse <b>$1</b>:</span>\r\n$3</div>", 
            '<a rel="nofollow" target="_blank" href="$1">$1</a>', 
            '<a rel="nofollow" target="_blank" href="$1">$2</a>', 
            '<a href="mailto: $1">$1</a>', 
            '<a href="mailto: $1">$2</a>', 
            '<img src="$1" alt="$1" />', 
            '<img src="$1" alt="$2" />', 
            '<div class="code">$2</div>', 
            '<object type="application/x-shockwave-flash" style="width: 450px; height: 366px;" data="http://www.youtube.com/v/$1"><param name="movie" value="http://www.youtube.com/v/$1" /><param name="wmode" value="transparent" /></object>', 
            '<object type="application/x-shockwave-flash" style="width: 450px; height: 366px;" data="http://www.youtube.com/v/$1"><param name="movie" value="http://www.youtube.com/v/$1" /><param name="wmode" value="transparent" /></object>' 
      ); 

      $text = preg_replace($advanced_bbcode, $advanced_html,$text); 
     } 

     //before return convert line breaks to HTML 
     return $text; 

    } 

?> 
Смежные вопросы