| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- <?php
- /**
- * Specialized string class for phpMyAdmin.
- * The SQL Parser code relies heavily on these functions.
- *
- * @package PhpMyAdmin-String
- */
- /**
- * Specialized string class for phpMyAdmin.
- * The SQL Parser code relies heavily on these functions.
- *
- * @package PhpMyAdmin-String
- */
- class PMA_String
- {
- /**
- * @var PMA_StringType
- */
- private $_type;
- /**
- * @var PMA_StringByte
- */
- private $_byte;
- /**
- * Constructor
- */
- public function __construct()
- {
- if (@function_exists('mb_strlen')) {
- mb_internal_encoding('utf-8');
- include_once 'libraries/StringMB.class.php';
- $this->_byte = new PMA_StringMB();
- } else {
- include_once 'libraries/StringNative.class.php';
- $this->_byte = new PMA_StringNative();
- }
- if (@extension_loaded('ctype')) {
- include_once 'libraries/StringCType.class.php';
- $this->_type = new PMA_StringCType();
- } else {
- include_once 'libraries/StringNativeType.class.php';
- $this->_type = new PMA_StringNativeType();
- }
- }
- /**
- * Checks if a given character position in the string is escaped or not
- *
- * @param string $string string to check for
- * @param integer $pos the character to check for
- * @param integer $start starting position in the string
- *
- * @return boolean whether the character is escaped or not
- */
- public function charIsEscaped($string, $pos, $start = 0)
- {
- $pos = max(intval($pos), 0);
- $start = max(intval($start), 0);
- $len = $this->strlen($string);
- // Base case:
- // Check for string length or invalid input or special case of input
- // (pos == $start)
- if ($pos <= $start || $len <= max($pos, $start)) {
- return false;
- }
- $pos--;
- $escaped = false;
- while ($pos >= $start && $this->substr($string, $pos, 1) == '\\') {
- $escaped = !$escaped;
- $pos--;
- } // end while
- return $escaped;
- }
- /**
- * Checks if a character is an SQL identifier
- *
- * @param string $c character to check for
- * @param boolean $dot_is_valid whether the dot character is valid or not
- *
- * @return boolean whether the character is an SQL identifier or not
- */
- public function isSqlIdentifier($c, $dot_is_valid = false)
- {
- return ($this->isAlnum($c)
- || ($ord_c = $this->ord($c)) && $ord_c >= 192 && $ord_c != 215 &&
- $ord_c != 249
- || $c == '_'
- || $c == '$'
- || ($dot_is_valid != false && $c == '.'));
- }
- /**
- * Returns length of string depending on current charset.
- *
- * @param string $string string to count
- *
- * @return int string length
- */
- public function strlen($string)
- {
- return $this->_byte->strlen($string);
- }
- /**
- * Returns substring from string, works depending on current charset.
- *
- * @param string $string string to count
- * @param int $start start of substring
- * @param int $length length of substring
- *
- * @return string the sub string
- */
- public function substr($string, $start, $length = 2147483647)
- {
- return $this->_byte->substr($string, $start, $length);
- }
- /**
- * Returns postion of $needle in $haystack or false if not found
- *
- * @param string $haystack the string being checked
- * @param string $needle the string to find in haystack
- * @param int $offset the search offset
- *
- * @return integer position of $needle in $haystack or false
- */
- public function strpos($haystack, $needle, $offset = 0)
- {
- return $this->_byte->strpos($haystack, $needle, $offset);
- }
- /**
- * Make a string lowercase
- *
- * @param string $string the string being lowercased
- *
- * @return string the lower case string
- */
- public function strtolower($string)
- {
- return $this->_byte->strtolower($string);
- }
- /**
- * Get the ordinal value of a string
- *
- * @param string $string the string for which ord is required
- *
- * @return string the ord value
- */
- public function ord($string)
- {
- return $this->_byte->ord($string);
- }
- /**
- * Checks if a character is an alphanumeric one
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is an alphanumeric one or not
- */
- public function isAlnum($c)
- {
- return $this->_type->isAlnum($c);
- }
- /**
- * Checks if a character is an alphabetic one
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is an alphabetic one or not
- */
- public function isAlpha($c)
- {
- return $this->_type->isAlpha($c);
- }
- /**
- * Checks if a character is a digit
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is a digit or not
- */
- public function isDigit($c)
- {
- return $this->_type->isDigit($c);
- }
- /**
- * Checks if a character is an upper alphabetic one
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is an upper alphabetic one or not
- */
- public function isUpper($c)
- {
- return $this->_type->isUpper($c);
- }
- /**
- * Checks if a character is a lower alphabetic one
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is a lower alphabetic one or not
- */
- public function isLower($c)
- {
- return $this->_type->isLower($c);
- }
- /**
- * Checks if a character is a space one
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is a space one or not
- */
- public function isSpace($c)
- {
- return $this->_type->isSpace($c);
- }
- /**
- * Checks if a character is an hexadecimal digit
- *
- * @param string $c character to check for
- *
- * @return boolean whether the character is an hexadecimal digit or not
- */
- public function isHexDigit($c)
- {
- return $this->_type->isHexDigit($c);
- }
- /**
- * Checks if a number is in a range
- *
- * @param integer $num number to check for
- * @param integer $lower lower bound
- * @param integer $upper upper bound
- *
- * @return boolean whether the number is in the range or not
- */
- public function numberInRangeInclusive($num, $lower, $upper)
- {
- return $this->_type->numberInRangeInclusive($num, $lower, $upper);
- }
- }
- ?>
|