Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ряд функций для преобразования html-кода в bbcode
Форумы портала PHP.SU » PHP » Пользовательские функции » ряд функций для преобразования html-кода в bbcode

Страниц (1): [1]
 

1. romario0403 - 02 Февраля, 2012 - 23:09:07 - перейти к сообщению
жду вашей критики и вопросовУлыбка
"собственно код" (Отобразить)
2. Dezmont - 21 Марта, 2012 - 11:22:32 - перейти к сообщению
Есть стандартные BBCode функции в PHP. Ссылка

В документации сказано, что эти функции быстрее регулярных выражений. Так что имхо сизифов труд...
3. Tox - 21 Апреля, 2012 - 18:32:34 - перейти к сообщению
Dezmont пишет:
Есть стандартные BBCode функции в PHP. Ссылка

В документации сказано, что эти функции быстрее регулярных выражений. Так что имхо сизифов труд...

А такой вопрос - это надо отдельно ставить, то есть пакетики компилировать и прочее, или уже по дефолту доступно? Там написано "установка расширения", вот и спросил
4. LIME - 21 Апреля, 2012 - 18:47:36 - перейти к сообщению
для пхп есть библиотек PEAR
она уже должна быть установлена на хостинге
на локалку придется ставить самому
как это делать гугл в помощь
для ббкода есть аналог в PEAR http://pear.php.net/package/HTML_BBCodeParser
о PECL
5. Tox - 23 Апреля, 2012 - 14:34:37 - перейти к сообщению
Спасибо, установил на хост, вот только проблема: открываем examples/parser.php, все норм, но стоит ввести какое-либо значение из предложенных и нажать "parse", выводится:

Warning: strpos() [function.strpos]: Empty delimiter in HTML/BBCodeParser.php on line 354

PHP:
скопировать код в буфер обмена
  1. /**
  2.      * Builds the tag array from the input string $_text
  3.      *
  4.      * An array consisting of tag and text elements is contructed from the
  5.      * $_preparsed variable. The method uses _buildTag() to check if a tag is
  6.      * valid and to build the actual tag to be added to the tag array.
  7.      *
  8.      * TODO: - rewrite whole method, as this one is old and probably slow
  9.      *       - see if a recursive method would be better than an iterative one
  10.      *
  11.      * @return   none
  12.      * @access   private
  13.      * @see      _buildTag()
  14.      * @see      $_text
  15.      * @see      $_tagArray
  16.      * @author   Stijn de Reede  <sjr@gmx.co.uk>
  17.      */
  18.     function _buildTagArray()
  19.     {
  20.         $this->_tagArray = array();
  21.         $str = $this->_preparsed;
  22.         $strPos = 0;
  23.         $strLength = strlen($str);
  24.  
  25.         while (($strPos < $strLength)) {
  26.             $tag = array();
  27.         $openPos = strpos($str, $this->_options['open'], $strPos);
  28.             if ($openPos === false) {
  29.                 $openPos = $strLength;
  30.                 $nextOpenPos = $strLength;
  31.             }
  32.             if ($openPos + 1 > $strLength) {
  33.                 $nextOpenPos = $strLength;
  34.             } else {
  35.                 $nextOpenPos = strpos($str, $this->_options['open'], $openPos + 1);
  36.                 if ($nextOpenPos === false) {
  37.                     $nextOpenPos = $strLength;
  38.                 }
  39.             }
  40.             $closePos = strpos($str, $this->_options['close'], $strPos);
  41.             if ($closePos === false) {
  42.                 $closePos = $strLength + 1;
  43.             }
  44.  
  45.             if ($openPos == $strPos) {
  46.                 if (($nextOpenPos < $closePos)) {
  47.                     // new open tag before closing tag: treat as text
  48.                     $newPos = $nextOpenPos;
  49.                     $tag['text'] = substr($str, $strPos, $nextOpenPos - $strPos);
  50.                     $tag['type'] = 0;
  51.                 } else {
  52.                     // possible valid tag
  53.                     $newPos = $closePos + 1;
  54.                     $newTag = $this->_buildTag(substr($str, $strPos, $closePos - $strPos + 1));
  55.                     if (($newTag !== false)) {
  56.                         $tag = $newTag;
  57.                     } else {
  58.                         // no valid tag after all
  59.                         $tag['text'] = substr($str, $strPos, $closePos - $strPos + 1);
  60.                         $tag['type'] = 0;
  61.                     }
  62.                 }
  63.             } else {
  64.                 // just text
  65.                 $newPos = $openPos;
  66.                 $tag['text'] = substr($str, $strPos, $openPos - $strPos);
  67.                 $tag['type'] = 0;
  68.             }
  69.  
  70.             // join 2 following text elements
  71.             if ($tag['type'] === 0 && isset($prev) && $prev['type'] === 0) {
  72.                 $tag['text'] = $prev['text'].$tag['text'];
  73.                 array_pop($this->_tagArray);
  74.             }
  75.  
  76.             $this->_tagArray[] = $tag;
  77.             $prev = $tag;
  78.             $strPos = $newPos;
  79.         }
  80.     }

Из того, что написано в комментах ясно, что разработчики просят переписать данный метод.
Ошибка в $openPos = strpos($str, $this->_options['open'], $strPos);
Может кто-то уже делал? Улыбка
6. romario0403 - 02 Июня, 2012 - 15:36:31 - перейти к сообщению
эх!...давно тут не был Улыбка
Может я что-то недопонимаю, но ссылки в комментариях ведут на библиотеки для преобразования бб в хтмл.
Мои функции наоборот преобразовывают хтмл-код в бб. Парсер тем с форумов(в моем случае раздач с трекера).
Засунул ссылку и получил бб-код

 

Powered by ExBB FM 1.0 RC1