Ejemplo n.º 1
0
 /**
  * Does the actual bbcode replacement
  *
  * @access	protected
  * @param	string		Current bbcode to parse
  * @param	string		[Optional] Option text
  * @param	string		[Optional for single tag bbcodes] Content text
  * @return	string		Converted text
  */
 protected function _parseBBCodeTag($_bbcode, $option = '', $content = '')
 {
     // -----------------------------------------
     // Strip the optional quote delimiters
     // -----------------------------------------
     $option = str_replace('"', '"', $option);
     $option = str_replace('"', '"', $option);
     $option = str_replace(''', "'", $option);
     $option = trim($option, '"' . "'");
     // -----------------------------------------
     // Stop CSS injection
     // -----------------------------------------
     if ($option) {
         // -----------------------------------------
         // Cut off for entities in option
         // @see
         // http://community.invisionpower.com/tracker/issue-19958-acronym/
         // -----------------------------------------
         $option = IPSText::UNhtmlspecialchars($option);
         $option = str_replace('!', '!', $option);
         /* http://community.invisionpower.com/resources/bugs.html/_/ip-board/error-in-accented-characters-in-the-option-tag-bbcode-r40739 */
         $option = IPSText::convertNumericEntityToNamed($option);
         $option = IPSText::decodeNamedHtmlEntities($option);
         $option = IPSText::UNhtmlspecialchars($option);
         if (strpos($option, ';') !== false) {
             $option = substr($option, 0, strpos($option, ';'));
         }
         $charSet = IPS_DOC_CHAR_SET == 'ISO-8859-1' ? 'ISO-8859-15' : IPS_DOC_CHAR_SET;
         $option = @htmlentities($option, ENT_NOQUOTES, $charSet);
         $option = str_replace('!', '!', $option);
     }
     $option = str_replace('"', '"', $option);
     $option = str_replace("'", ''', $option);
     // -----------------------------------------
     // Swapping option/content?
     // -----------------------------------------
     if ($_bbcode['bbcode_switch_option']) {
         $_tmp = $content;
         $content = $option;
         $option = $_tmp;
     }
     // -----------------------------------------
     // Replace
     // -----------------------------------------
     $replaceCode = $_bbcode['bbcode_replace'];
     $replaceCode = str_replace('{base_url}', $this->settings['board_url'] . '/index.php?', $replaceCode);
     $replaceCode = str_replace('{image_url}', $this->settings['img_url'], $replaceCode);
     preg_match('/\\{text\\.(.+?)\\}/i', $replaceCode, $matches);
     if (is_array($matches) and count($matches)) {
         $replaceCode = str_replace($matches[0], $this->lang->words[$matches[1]], $replaceCode);
     }
     $replaceCode = str_replace('{option}', $option, $replaceCode);
     $replaceCode = str_replace('{content}', $content, $replaceCode);
     // -----------------------------------------
     // Fix linebreaks in textareas
     // -----------------------------------------
     if (stripos($replaceCode, "<textarea") !== false) {
         $replaceCode = str_replace('<br />', "", $replaceCode);
         $replaceCode = str_replace("\r", "", $replaceCode);
         $replaceCode = str_replace("\n", "<br />", $replaceCode);
     }
     return $replaceCode;
 }