⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directlex.php

📁 很棒的在线教学系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
                                if ($position_first_space >= $strlen_segment) {                    if ($is_self_closing) {                        $token = new HTMLPurifier_Token_Empty($segment);                    } else {                        $token = new HTMLPurifier_Token_Start($segment);                    }                    if ($maintain_line_numbers) {                        $token->line = $current_line;                        $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor);                    }                    $array[] = $token;                    $inside_tag = false;                    $cursor = $position_next_gt + 1;                    continue;                }                                // Grab out all the data                $type = substr($segment, 0, $position_first_space);                $attribute_string =                    trim(                        substr(                            $segment, $position_first_space                        )                    );                if ($attribute_string) {                    $attr = $this->parseAttributeString(                                    $attribute_string                                  , $config, $context                              );                } else {                    $attr = array();                }                                if ($is_self_closing) {                    $token = new HTMLPurifier_Token_Empty($type, $attr);                } else {                    $token = new HTMLPurifier_Token_Start($type, $attr);                }                if ($maintain_line_numbers) {                    $token->line = $current_line;                    $current_line += $this->substrCount($html, $nl, $cursor, $position_next_gt - $cursor);                }                $array[] = $token;                $cursor = $position_next_gt + 1;                $inside_tag = false;                continue;            } else {                // inside tag, but there's no ending > sign                if ($e) $e->send(E_WARNING, 'Lexer: Missing gt');                $token = new                    HTMLPurifier_Token_Text(                        '<' .                        $this->parseData(                            substr($html, $cursor)                        )                    );                if ($maintain_line_numbers) $token->line = $current_line;                // no cursor scroll? Hmm...                $array[] = $token;                break;            }            break;        }                $context->destroy('CurrentLine');        return $array;    }        /**     * PHP 4 compatible substr_count that implements offset and length     */    function substrCount($haystack, $needle, $offset, $length) {        static $oldVersion;        if ($oldVersion === null) {            $oldVersion = version_compare(PHP_VERSION, '5.1', '<');        }        if ($oldVersion) {            $haystack = substr($haystack, $offset, $length);            return substr_count($haystack, $needle);        } else {            return substr_count($haystack, $needle, $offset, $length);        }    }        /**     * Takes the inside of an HTML tag and makes an assoc array of attributes.     *      * @param $string Inside of tag excluding name.     * @returns Assoc array of attributes.     */    function parseAttributeString($string, $config, &$context) {        $string = (string) $string; // quick typecast                if ($string == '') return array(); // no attributes                $e = false;        if ($config->get('Core', 'CollectErrors')) {            $e =& $context->get('ErrorCollector');        }                // let's see if we can abort as quickly as possible        // one equal sign, no spaces => one attribute        $num_equal = substr_count($string, '=');        $has_space = strpos($string, ' ');        if ($num_equal === 0 && !$has_space) {            // bool attribute            return array($string => $string);        } elseif ($num_equal === 1 && !$has_space) {            // only one attribute            list($key, $quoted_value) = explode('=', $string);            $quoted_value = trim($quoted_value);            if (!$key) {                if ($e) $e->send(E_ERROR, 'Lexer: Missing attribute key');                return array();            }            if (!$quoted_value) return array($key => '');            $first_char = @$quoted_value[0];            $last_char  = @$quoted_value[strlen($quoted_value)-1];                        $same_quote = ($first_char == $last_char);            $open_quote = ($first_char == '"' || $first_char == "'");                        if ( $same_quote && $open_quote) {                // well behaved                $value = substr($quoted_value, 1, strlen($quoted_value) - 2);            } else {                // not well behaved                if ($open_quote) {                    if ($e) $e->send(E_ERROR, 'Lexer: Missing end quote');                    $value = substr($quoted_value, 1);                } else {                    $value = $quoted_value;                }            }            if ($value === false) $value = '';            return array($key => $value);        }                // setup loop environment        $array  = array(); // return assoc array of attributes        $cursor = 0; // current position in string (moves forward)        $size   = strlen($string); // size of the string (stays the same)                // if we have unquoted attributes, the parser expects a terminating        // space, so let's guarantee that there's always a terminating space.        $string .= ' ';                // infinite loop protection        $loops = 0;        while(true) {                        // infinite loop protection            if (++$loops > 1000) {                trigger_error('Infinite loop detected in attribute parsing', E_USER_WARNING);                return array();            }                        if ($cursor >= $size) {                break;            }                        $cursor += ($value = strspn($string, $this->_whitespace, $cursor));            // grab the key                        $key_begin = $cursor; //we're currently at the start of the key                        // scroll past all characters that are the key (not whitespace or =)            $cursor += strcspn($string, $this->_whitespace . '=', $cursor);                        $key_end = $cursor; // now at the end of the key                        $key = substr($string, $key_begin, $key_end - $key_begin);                        if (!$key) {                if ($e) $e->send(E_ERROR, 'Lexer: Missing attribute key');                $cursor += strcspn($string, $this->_whitespace, $cursor + 1); // prevent infinite loop                continue; // empty key            }                        // scroll past all whitespace            $cursor += strspn($string, $this->_whitespace, $cursor);                        if ($cursor >= $size) {                $array[$key] = $key;                break;            }                        // if the next character is an equal sign, we've got a regular            // pair, otherwise, it's a bool attribute            $first_char = @$string[$cursor];                        if ($first_char == '=') {                // key="value"                                $cursor++;                $cursor += strspn($string, $this->_whitespace, $cursor);                                if ($cursor === false) {                    $array[$key] = '';                    break;                }                                // we might be in front of a quote right now                                $char = @$string[$cursor];                                if ($char == '"' || $char == "'") {                    // it's quoted, end bound is $char                    $cursor++;                    $value_begin = $cursor;                    $cursor = strpos($string, $char, $cursor);                    $value_end = $cursor;                } else {                    // it's not quoted, end bound is whitespace                    $value_begin = $cursor;                    $cursor += strcspn($string, $this->_whitespace, $cursor);                    $value_end = $cursor;                }                                // we reached a premature end                if ($cursor === false) {                    $cursor = $size;                    $value_end = $cursor;                }                                $value = substr($string, $value_begin, $value_end - $value_begin);                if ($value === false) $value = '';                $array[$key] = $this->parseData($value);                $cursor++;                            } else {                // boolattr                if ($key !== '') {                    $array[$key] = $key;                } else {                    // purely theoretical                    if ($e) $e->send(E_ERROR, 'Lexer: Missing attribute key');                }                            }        }        return $array;    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -