function smarty_outputfilter_trimwhitespace_replace($search_str, $replace, &$subject)
{
    $_len = mb_strlen($search_str);
    $_pos = 0;
    for ($_i = 0, $_count = count($replace); $_i < $_count; $_i++) {
        if (($_pos = mb_strpos($subject, $search_str, $_pos)) !== false) {
            $subject = icms_substr_replace($subject, $replace[$_i], $_pos, $_len);
        } else {
            break;
        }
    }
}
示例#2
0
 public function get_html($tree_of_elems = false)
 {
     if (!is_array($tree_of_elems)) {
         $tree_of_elems = $this->get_tree_of_elems();
     }
     $result = '';
     $lbr = 0;
     $rbr = 0;
     foreach ($tree_of_elems as $elem) {
         if ('text' == $elem['type']) {
             $elem['str'] = $this->insert_smiles($elem['str']);
             for ($i = 0; $i < $rbr; ++$i) {
                 $elem['str'] = ltrim($elem['str']);
                 if ('<br />' == mb_substr($elem['str'], 0, 6)) {
                     $elem['str'] = icms_substr_replace($elem['str'], '', 0, 6);
                 }
             }
             $result .= $elem['str'];
         } else {
             $lbr = $this->info_about_tags[$elem['name']]['lbr'];
             $rbr = $this->info_about_tags[$elem['name']]['rbr'];
             for ($i = 0; $i < $lbr; ++$i) {
                 $result = rtrim($result);
                 if ('<br />' == mb_substr($result, -6)) {
                     $result = icms_substr_replace($result, '', -6, 6);
                 }
             }
             $func_name = $this->info_about_tags[$elem['name']]['handler'];
             $result .= call_user_func(array(&$this, $func_name), $elem);
         }
     }
     return $result;
 }
示例#3
0
 function parse()
 {
     // first remove the XML declaration
     // merged from WP #10698 - this method avoids the RAM usage of preg_replace on very large messages
     $header = preg_replace('/<\\?xml.*?\\?' . '>/', '', substr($this->message, 0, 100), 1);
     $this->message = icms_substr_replace($this->message, $header, 0, 100);
     if (trim($this->message) == '') {
         return false;
     }
     $this->_parser = xml_parser_create();
     // Set XML parser to take the case of tags in to account
     xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false);
     // Set XML parser callback functions
     xml_set_object($this->_parser, $this);
     xml_set_element_handler($this->_parser, 'tag_open', 'tag_close');
     xml_set_character_data_handler($this->_parser, 'cdata');
     $chunk_size = 262144;
     // 256Kb, parse in chunks to avoid the RAM usage on very large messages
     do {
         if (mb_strlen($this->message) <= $chunk_size) {
             $final = true;
         }
         $part = mb_substr($this->message, 0, $chunk_size);
         $this->message = substr($this->message, $chunk_size);
         if (!xml_parse($this->_parser, $part, $final)) {
             return false;
         }
         if ($final) {
             break;
         }
     } while (true);
     xml_parser_free($this->_parser);
     // Grab the error messages, if any
     if ($this->messageType == 'fault') {
         $this->faultCode = $this->params[0]['faultCode'];
         $this->faultString = $this->params[0]['faultString'];
     }
     return true;
 }