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; } } }
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; }
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; }