Zeile 2 | Zeile 2 |
---|
/**
|
/**
|
* The Horde_String:: class provides static methods for charset and locale * safe string manipulation.
| * Provides static methods for charset and locale safe string manipulation.
|
*
|
*
|
* Copyright 2003-2012 Horde LLC (http://www.horde.org/)
| * Copyright 2003-2017 Horde LLC (http://www.horde.org/)
|
* * See the enclosed file COPYING for license information (LGPL). If you * did not receive this file, see http://www.horde.org/licenses/lgpl21.
|
* * See the enclosed file COPYING for license information (LGPL). If you * did not receive this file, see http://www.horde.org/licenses/lgpl21.
|
| * * @todo Split up in Horde_String_Multibyte for multibyte-safe methods and * Horde_String_Locale for locale-safe methods.
|
* * @author Jan Schneider <jan@horde.org> * @category Horde
| * * @author Jan Schneider <jan@horde.org> * @category Horde
|
Zeile 24 | Zeile 26 |
---|
{ /** * lower() cache.
|
{ /** * lower() cache.
|
* * @var array */ static protected $_lowers = array();
/**
| * * @var array */ protected static $_lowers = array();
/**
|
* upper() cache. * * @var array */
|
* upper() cache. * * @var array */
|
static protected $_uppers = array();
| protected static $_uppers = array();
|
/** * Converts a string from one charset to another.
| /** * Converts a string from one charset to another.
|
Zeile 52 | Zeile 54 |
---|
* * @return mixed The converted input data. */
|
* * @return mixed The converted input data. */
|
static public function convertCharset($input, $from, $to, $force = false)
| public static function convertCharset($input, $from, $to, $force = false)
|
{ /* Don't bother converting numbers. */ if (is_numeric($input)) {
| { /* Don't bother converting numbers. */ if (is_numeric($input)) {
|
Zeile 71 | Zeile 73 |
---|
if (is_array($input)) { $tmp = array();
|
if (is_array($input)) { $tmp = array();
|
reset($input); while (list($key, $val) = each($input)) {
| foreach ($input as $key => $val) {
|
$tmp[self::_convertCharset($key, $from, $to)] = self::convertCharset($val, $from, $to, $force); } return $tmp;
|
$tmp[self::_convertCharset($key, $from, $to)] = self::convertCharset($val, $from, $to, $force); } return $tmp;
|
}
| }
|
if (is_object($input)) { // PEAR_Error/Exception objects are almost guaranteed to contain
| if (is_object($input)) { // PEAR_Error/Exception objects are almost guaranteed to contain
|
Zeile 87 | Zeile 88 |
---|
return ''; }
|
return ''; }
|
$input = Horde_Util::cloneObject($input);
| $input = clone $input;
|
$vars = get_object_vars($input);
|
$vars = get_object_vars($input);
|
while (list($key, $val) = each($vars)) {
| foreach ($vars as $key => $val) {
|
$input->$key = self::convertCharset($val, $from, $to, $force); } return $input;
| $input->$key = self::convertCharset($val, $from, $to, $force); } return $input;
|
Zeile 100 | Zeile 101 |
---|
}
return self::_convertCharset($input, $from, $to);
|
}
return self::_convertCharset($input, $from, $to);
|
}
| }
|
/** * Internal function used to do charset conversion. *
| /** * Internal function used to do charset conversion. *
|
Zeile 111 | Zeile 112 |
---|
* * @return string The converted string. */
|
* * @return string The converted string. */
|
static protected function _convertCharset($input, $from, $to)
| protected static function _convertCharset($input, $from, $to)
|
{ /* Use utf8_[en|de]code() if possible and if the string isn't too * large (less than 16 MB = 16 * 1024 * 1024 = 16777216 bytes) - these
| { /* Use utf8_[en|de]code() if possible and if the string isn't too * large (less than 16 MB = 16 * 1024 * 1024 = 16777216 bytes) - these
|
Zeile 156 | Zeile 157 |
---|
$out = @iconv($from, $to . '//TRANSLIT', $input); $errmsg = isset($php_errormsg); ini_restore('track_errors');
|
$out = @iconv($from, $to . '//TRANSLIT', $input); $errmsg = isset($php_errormsg); ini_restore('track_errors');
|
if (!$errmsg) {
| if (!$errmsg && $out !== false) {
|
return $out; } }
| return $out; } }
|
Zeile 183 | Zeile 184 |
---|
* * @return string The string with lowercase characters. */
|
* * @return string The string with lowercase characters. */
|
static public function lower($string, $locale = false, $charset = null)
| public static function lower($string, $locale = false, $charset = null)
|
{ if ($locale) { if (Horde_Util::extensionExists('mbstring')) {
| { if ($locale) { if (Horde_Util::extensionExists('mbstring')) {
|
Zeile 219 | Zeile 220 |
---|
* * @return string The string with uppercase characters. */
|
* * @return string The string with uppercase characters. */
|
static public function upper($string, $locale = false, $charset = null)
| public static function upper($string, $locale = false, $charset = null)
|
{ if ($locale) { if (Horde_Util::extensionExists('mbstring')) {
| { if ($locale) { if (Horde_Util::extensionExists('mbstring')) {
|
Zeile 255 | Zeile 256 |
---|
* * @return string The capitalized string. */
|
* * @return string The capitalized string. */
|
static public function ucfirst($string, $locale = false, $charset = null)
| public static function ucfirst($string, $locale = false, $charset = null)
|
{ if ($locale) { if (is_null($charset)) {
| { if ($locale) { if (is_null($charset)) {
|
Zeile 285 | Zeile 286 |
---|
* * @return string The capitalized string. */
|
* * @return string The capitalized string. */
|
static public function ucwords($string, $locale = false, $charset = null)
| public static function ucwords($string, $locale = false, $charset = null)
|
{ $words = preg_split('/(\s+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0, $c = count($words); $i < $c; $i += 2) {
| { $words = preg_split('/(\s+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0, $c = count($words); $i < $c; $i += 2) {
|
Zeile 306 | Zeile 307 |
---|
* * @return string The string's part. */
|
* * @return string The string's part. */
|
static public function substr($string, $start, $length = null,
| public static function substr($string, $start, $length = null,
|
$charset = 'UTF-8') { if (is_null($length)) { $length = self::length($string, $charset) - $start; }
|
$charset = 'UTF-8') { if (is_null($length)) { $length = self::length($string, $charset) - $start; }
|
if ($length == 0) {
| if ($length === 0) {
|
return ''; }
|
return ''; }
|
| $error = false;
|
/* Try mbstring. */ if (Horde_Util::extensionExists('mbstring')) {
| /* Try mbstring. */ if (Horde_Util::extensionExists('mbstring')) {
|
Zeile 323 | Zeile 326 |
---|
/* mb_substr() returns empty string on failure. */ if (strlen($ret)) {
|
/* mb_substr() returns empty string on failure. */ if (strlen($ret)) {
|
return $ret;
| return $ret;
|
}
|
}
|
| $error = true;
|
}
/* Try iconv. */ if (Horde_Util::extensionExists('iconv')) {
|
}
/* Try iconv. */ if (Horde_Util::extensionExists('iconv')) {
|
$ret = @iconv_substr($string, $start, $length, $charset);
| $ret = @iconv_substr($string, $start, $length, $charset);
|
/* iconv_substr() returns false on failure. */
|
/* iconv_substr() returns false on failure. */
|
if ($ret !== false) {
| if ($ret !== false) {
|
return $ret; }
|
return $ret; }
|
| $error = true;
|
}
|
}
|
return substr($string, $start, $length);
| /* Try intl. */ if (Horde_Util::extensionExists('intl')) { $ret = self::convertCharset( @grapheme_substr( self::convertCharset($string, $charset, 'UTF-8'), $start, $length ), 'UTF-8', $charset );
/* grapheme_substr() returns false on failure. */ if ($ret !== false) { return $ret; } $error = true; }
return $error ? '' : substr($string, $start, $length);
|
}
/**
| }
/**
|
Zeile 349 | Zeile 375 |
---|
* * @return integer The string's length. */
|
* * @return integer The string's length. */
|
static public function length($string, $charset = 'UTF-8')
| public static function length($string, $charset = 'UTF-8')
|
{ $charset = self::lower($charset);
| { $charset = self::lower($charset);
|
Zeile 362 | Zeile 388 |
---|
if (!empty($ret)) { return $ret; }
|
if (!empty($ret)) { return $ret; }
|
| } if (Horde_Util::extensionExists('intl')) { return grapheme_strlen( self::convertCharset($string, $charset, 'UTF-8') );
|
}
return strlen($string);
| }
return strlen($string);
|
Zeile 369 | Zeile 400 |
---|
/** * Returns the numeric position of the first occurrence of $needle
|
/** * Returns the numeric position of the first occurrence of $needle
|
* in the $haystack string. *
| * in the $haystack string. *
|
* @param string $haystack The string to search through. * @param string $needle The string to search for.
|
* @param string $haystack The string to search through. * @param string $needle The string to search for.
|
* @param integer $offset Allows to specify which character in haystack * to start searching. * @param string $charset The charset to use when searching for the * $needle string.
| * @param integer $offset Character in $haystack to start searching at. * @param string $charset Charset of $needle.
|
* * @return integer The position of first occurrence.
|
* * @return integer The position of first occurrence.
|
*/ static public function pos($haystack, $needle, $offset = 0, $charset = 'UTF-8') { if (Horde_Util::extensionExists('mbstring')) { $track_errors = ini_set('track_errors', 1); $ret = @mb_strpos($haystack, $needle, $offset, self::_mbstringCharset($charset)); ini_set('track_errors', $track_errors); if (!isset($php_errormsg)) { return $ret; } }
return strpos($haystack, $needle, $offset);
| */ public static function pos( $haystack, $needle, $offset = 0, $charset = 'UTF-8' ) { return self::_pos($haystack, $needle, $offset, $charset, 'strpos'); }
/** * Returns the numeric position of the first case-insensitive occurrence * of $needle in the $haystack string. * * @since 2.5.0 * * @param string $haystack The string to search through. * @param string $needle The string to search for. * @param integer $offset Character in $haystack to start searching at. * @param string $charset Charset of $needle. * * @return integer The position of first case-insensitive occurrence. */ public static function ipos( $haystack, $needle, $offset = 0, $charset = 'UTF-8' ) { return self::_pos($haystack, $needle, $offset, $charset, 'stripos'); }
/** * Returns the numeric position of the last occurrence of $needle * in the $haystack string. * * @param string $haystack The string to search through. * @param string $needle The string to search for. * @param integer $offset Character in $haystack to start searching at. * @param string $charset Charset of $needle. * * @return integer The position of last occurrence. */ public static function rpos( $haystack, $needle, $offset = 0, $charset = 'UTF-8' ) { return self::_pos($haystack, $needle, $offset, $charset, 'strrpos'); }
/** * Returns the numeric position of the last case-insensitive occurrence of * $needle in the $haystack string. * * @since 2.5.0 * * @param string $haystack The string to search through. * @param string $needle The string to search for. * @param integer $offset Character in $haystack to start searching at. * @param string $charset Charset of $needle. * * @return integer The position of last case-insensitive occurrence. */ public static function ripos( $haystack, $needle, $offset = 0, $charset = 'UTF-8' ) { return self::_pos($haystack, $needle, $offset, $charset, 'strripos');
|
}
/**
|
}
/**
|
* Returns the numeric position of the last occurrence of $needle * in the $haystack string.
| * Perform string position searches.
|
* * @param string $haystack The string to search through.
|
* * @param string $haystack The string to search through.
|
* @param string $needle The string to search for. * @param integer $offset Allows to specify which character in haystack * to start searching. * @param string $charset The charset to use when searching for the * $needle string.
| * @param string $needle The string to search for. * @param integer $offset Character in $haystack to start searching at. * @param string $charset Charset of $needle. * @param string $func Function to use. * * @return integer The position of occurrence.
|
*
|
*
|
* @return integer The position of first occurrence.
| |
*/
|
*/
|
static public function rpos($haystack, $needle, $offset = 0, $charset = 'UTF-8')
| protected static function _pos( $haystack, $needle, $offset, $charset, $func )
|
{ if (Horde_Util::extensionExists('mbstring')) {
|
{ if (Horde_Util::extensionExists('mbstring')) {
|
| unset($php_errormsg); $track_errors = ini_set('track_errors', 1); $ret = @call_user_func('mb_' . $func, $haystack, $needle, $offset, self::_mbstringCharset($charset)); ini_set('track_errors', $track_errors); if (!isset($php_errormsg)) { return $ret; } }
if (Horde_Util::extensionExists('intl')) { unset($php_errormsg);
|
$track_errors = ini_set('track_errors', 1);
|
$track_errors = ini_set('track_errors', 1);
|
$ret = @mb_strrpos($haystack, $needle, $offset, self::_mbstringCharset($charset));
| $ret = self::convertCharset( @call_user_func( 'grapheme_' . $func, self::convertCharset($haystack, $charset, 'UTF-8'), self::convertCharset($needle, $charset, 'UTF-8'), $offset ), 'UTF-8', $charset );
|
ini_set('track_errors', $track_errors); if (!isset($php_errormsg)) { return $ret; }
|
ini_set('track_errors', $track_errors); if (!isset($php_errormsg)) { return $ret; }
|
}
| }
|
|
|
return strrpos($haystack, $needle, $offset);
| return $func($haystack, $needle, $offset);
|
}
/**
| }
/**
|
Zeile 438 | Zeile 537 |
---|
* * @return string The padded string. */
|
* * @return string The padded string. */
|
static public function pad($input, $length, $pad = ' ',
| public static function pad($input, $length, $pad = ' ',
|
$type = STR_PAD_RIGHT, $charset = 'UTF-8') { $mb_length = self::length($input, $charset);
| $type = STR_PAD_RIGHT, $charset = 'UTF-8') { $mb_length = self::length($input, $charset);
|
Zeile 473 | Zeile 572 |
---|
$right = $length - $mb_length; $output = $input . self::substr(str_repeat($pad, ceil($right / $pad_length)), 0, $right, $charset); break;
|
$right = $length - $mb_length; $output = $input . self::substr(str_repeat($pad, ceil($right / $pad_length)), 0, $right, $charset); break;
|
}
| }
|
return $output; }
/** * Wraps the text of a message.
|
return $output; }
/** * Wraps the text of a message.
|
*
| *
|
* @param string $string String containing the text to wrap. * @param integer $width Wrap the string at this number of * characters.
| * @param string $string String containing the text to wrap. * @param integer $width Wrap the string at this number of * characters.
|
Zeile 494 | Zeile 593 |
---|
* * @return string String containing the wrapped text. */
|
* * @return string String containing the wrapped text. */
|
static public function wordwrap($string, $width = 75, $break = "\n",
| public static function wordwrap($string, $width = 75, $break = "\n",
|
$cut = false, $line_folding = false) {
|
$cut = false, $line_folding = false) {
|
| $breakRegex = '(?:' . preg_quote($break) . ')'; $rpos = self::rpos($break, "\n"); if ($rpos === false) { $rpos = 0; } else { $rpos++; }
|
$wrapped = '';
|
$wrapped = '';
|
| $hasWrapped = false;
|
while (self::length($string, 'UTF-8') > $width) {
|
while (self::length($string, 'UTF-8') > $width) {
|
$line = self::substr($string, 0, $width, 'UTF-8');
| $line = self::substr($string, 0, $width + ($hasWrapped ? $rpos : 0), 'UTF-8');
|
$string = self::substr($string, self::length($line, 'UTF-8'), null, 'UTF-8');
// Make sure we didn't cut a word, unless we want hard breaks
| $string = self::substr($string, self::length($line, 'UTF-8'), null, 'UTF-8');
// Make sure we didn't cut a word, unless we want hard breaks
|
Zeile 508 | Zeile 615 |
---|
if (!$cut && preg_match('/^(.+?)((\s|\r?\n).*)/us', $string, $match)) { $line .= $match[1]; $string = $match[2];
|
if (!$cut && preg_match('/^(.+?)((\s|\r?\n).*)/us', $string, $match)) { $line .= $match[1]; $string = $match[2];
|
}
| }
|
// Wrap at existing line breaks.
|
// Wrap at existing line breaks.
|
if (preg_match('/^(.*?)(\r?\n)(.*)$/su', $line, $match)) {
| $regex = '/^(' . ($hasWrapped ? $breakRegex : '') . '.*?)(\r?\n)(.*)$/us'; if (preg_match($regex, $line, $match)) {
|
$wrapped .= $match[1] . $match[2]; $string = $match[3] . $string;
|
$wrapped .= $match[1] . $match[2]; $string = $match[3] . $string;
|
| $hasWrapped = false;
|
continue; }
// Wrap at the last colon or semicolon followed by a whitespace if // doing line folding. if ($line_folding &&
|
continue; }
// Wrap at the last colon or semicolon followed by a whitespace if // doing line folding. if ($line_folding &&
|
preg_match('/^(.*?)(;|:)(\s+.*)$/u', $line, $match)) { $wrapped .= $match[1] . $match[2] . $break; $string = $match[3] . $string;
| preg_match('/^(.*?)(;|:)(\s+.*)$/us', $line, $match)) { $wrapped .= $match[1] . $match[2]; $string = $break . $match[3] . $string; $hasWrapped = true;
|
continue; }
// Wrap at the last whitespace of $line. $sub = $line_folding
|
continue; }
// Wrap at the last whitespace of $line. $sub = $line_folding
|
? '(.+[^\s])' : '(.*)';
| ? '(' . ($hasWrapped ? $breakRegex : '') . '.+[^\s])' : '(' . ($hasWrapped ? $breakRegex : '') . '.*)';
|
if (preg_match('/^' . $sub . '(\s+)(.*)$/u', $line, $match)) {
|
if (preg_match('/^' . $sub . '(\s+)(.*)$/u', $line, $match)) {
|
$wrapped .= $match[1] . $break; $string = ($line_folding ? $match[2] : '') . $match[3] . $string;
| $wrapped .= $match[1]; $string = $break . ($line_folding ? $match[2] : '') . $match[3] . $string; $hasWrapped = true;
|
continue; }
// Hard wrap if necessary. if ($cut) {
|
continue; }
// Hard wrap if necessary. if ($cut) {
|
$wrapped .= $line . $break;
| $wrapped .= $line; $string = $break . $string; $hasWrapped = true;
|
continue; }
$wrapped .= $line;
|
continue; }
$wrapped .= $line;
|
| $hasWrapped = false;
|
}
return $wrapped . $string;
| }
return $wrapped . $string;
|
Zeile 562 | Zeile 677 |
---|
* * @return string String containing the wrapped text. */
|
* * @return string String containing the wrapped text. */
|
static public function wrap($text, $length = 80, $break_char = "\n",
| public static function wrap($text, $length = 80, $break_char = "\n",
|
$quote = false) { $paragraphs = array();
| $quote = false) { $paragraphs = array();
|
Zeile 594 | Zeile 709 |
---|
* * @return string The truncated string, if longer than $length. */
|
* * @return string The truncated string, if longer than $length. */
|
static public function truncate($text, $length = 100)
| public static function truncate($text, $length = 100)
|
{ return (self::length($text) > $length) ? rtrim(self::substr($text, 0, $length - 3)) . '...'
| { return (self::length($text) > $length) ? rtrim(self::substr($text, 0, $length - 3)) . '...'
|
Zeile 610 | Zeile 725 |
---|
* * @return string The abbreviated string, if longer than $length. */
|
* * @return string The abbreviated string, if longer than $length. */
|
static public function abbreviate($text, $length = 20)
| public static function abbreviate($text, $length = 20)
|
{ return (self::length($text) > $length) ? rtrim(self::substr($text, 0, round(($length - 3) / 2))) . '...' . ltrim(self::substr($text, (($length - 3) / 2) * -1))
| { return (self::length($text) > $length) ? rtrim(self::substr($text, 0, round(($length - 3) / 2))) . '...' . ltrim(self::substr($text, (($length - 3) / 2) * -1))
|
Zeile 625 | Zeile 740 |
---|
* * @return string The start of $str1 and $str2 that is identical in both. */
|
* * @return string The start of $str1 and $str2 that is identical in both. */
|
static public function common($str1, $str2)
| public static function common($str1, $str2)
|
{ for ($result = '', $i = 0; isset($str1[$i]) && isset($str2[$i]) && $str1[$i] == $str2[$i];
| { for ($result = '', $i = 0; isset($str1[$i]) && isset($str2[$i]) && $str1[$i] == $str2[$i];
|
Zeile 644 | Zeile 759 |
---|
* * @return boolean True if the parameter was alphabetic only. */
|
* * @return boolean True if the parameter was alphabetic only. */
|
static public function isAlpha($string, $charset)
| public static function isAlpha($string, $charset)
|
{ if (!Horde_Util::extensionExists('mbstring')) { return ctype_alpha($string);
| { if (!Horde_Util::extensionExists('mbstring')) { return ctype_alpha($string);
|
Zeile 662 | Zeile 777 |
---|
}
return $alpha;
|
}
return $alpha;
|
}
| }
|
/** * Returns true if ever character in the parameter is a lowercase letter in
| /** * Returns true if ever character in the parameter is a lowercase letter in
|
Zeile 672 | Zeile 787 |
---|
* @param string $charset The charset to use when testing the string. * * @return boolean True if the parameter was lowercase.
|
* @param string $charset The charset to use when testing the string. * * @return boolean True if the parameter was lowercase.
|
*/ static public function isLower($string, $charset) {
| */ public static function isLower($string, $charset) {
|
return ((self::lower($string, true, $charset) === $string) && self::isAlpha($string, $charset)); }
| return ((self::lower($string, true, $charset) === $string) && self::isAlpha($string, $charset)); }
|
Zeile 684 | Zeile 799 |
---|
* in the current locale. * * @param string $string The string to test.
|
* in the current locale. * * @param string $string The string to test.
|
* @param string $charset The charset to use when testing the string. *
| * @param string $charset The charset to use when testing the string. *
|
* @return boolean True if the parameter was uppercase. */
|
* @return boolean True if the parameter was uppercase. */
|
static public function isUpper($string, $charset)
| public static function isUpper($string, $charset)
|
{ return ((self::upper($string, true, $charset) === $string) && self::isAlpha($string, $charset));
| { return ((self::upper($string, true, $charset) === $string) && self::isAlpha($string, $charset));
|
Zeile 704 | Zeile 819 |
---|
* * @return array The matches array from the first regex that matches. */
|
* * @return array The matches array from the first regex that matches. */
|
static public function regexMatch($text, $regex, $charset = null)
| public static function regexMatch($text, $regex, $charset = null)
|
{ if (!empty($charset)) { $regex = self::convertCharset($regex, $charset, 'utf-8');
| { if (!empty($charset)) { $regex = self::convertCharset($regex, $charset, 'utf-8');
|
Zeile 727 | Zeile 842 |
---|
/** * Check to see if a string is valid UTF-8.
|
/** * Check to see if a string is valid UTF-8.
|
* * @since 1.1.0
| |
* * @param string $text The text to check.
|
* * @param string $text The text to check.
|
*
| *
|
* @return boolean True if valid UTF-8. */
|
* @return boolean True if valid UTF-8. */
|
static public function validUtf8($text)
| public static function validUtf8($text)
|
{
|
{
|
/* Regex from: * http://stackoverflow.com/questions/1523460/ensuring-valid-utf-8-in-php */ return preg_match('/^(?: [\x09\x0A\x0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 )*$/xs', $text);
| $text = strval($text);
// First check for illegal surrogate pair sequences. See RFC 3629. if (preg_match('/\xE0[\x80-\x9F][\x80-\xBF]|\xED[\xA0-\xBF][\x80-\xBF]/S', $text)) { return false; }
for ($i = 0, $len = strlen($text); $i < $len; ++$i) { $c = ord($text[$i]); if ($c > 128) { if ($c > 247) { // STD 63 (RFC 3629) eliminates 5 & 6-byte characters. return false; } elseif ($c > 239) { $j = 3; } elseif ($c > 223) { $j = 2; } elseif ($c > 191) { $j = 1; } else { return false; }
if (($i + $j) > $len) { return false; }
do { $c = ord($text[++$i]); if (($c < 128) || ($c > 191)) { return false; } } while (--$j); } }
return true;
|
}
/**
| }
/**
|
Zeile 758 | Zeile 895 |
---|
* * @return string The charset to use with mbstring functions. */
|
* * @return string The charset to use with mbstring functions. */
|
static protected function _mbstringCharset($charset)
| protected static function _mbstringCharset($charset)
|
{ /* mbstring functions do not handle the 'ks_c_5601-1987' & * 'ks_c_5601-1989' charsets. However, these charsets are used, for * example, by various versions of Outlook to send Korean characters. * Use UHC (CP949) encoding instead. See, e.g., * http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0030.html */
|
{ /* mbstring functions do not handle the 'ks_c_5601-1987' & * 'ks_c_5601-1989' charsets. However, these charsets are used, for * example, by various versions of Outlook to send Korean characters. * Use UHC (CP949) encoding instead. See, e.g., * http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0030.html */
|
if ($charset == 'UTF-8' || $charset == 'utf-8') { return $charset; } if (in_array(self::lower($charset), array('ks_c_5601-1987', 'ks_c_5601-1989'))) { $charset = 'UHC'; }
| return in_array(self::lower($charset), array('ks_c_5601-1987', 'ks_c_5601-1989')) ? 'UHC' : $charset; }
|
|
|
return $charset;
| /** * Strip UTF-8 byte order mark (BOM) from string data. * * @param string $str Input string (UTF-8). * * @return string Stripped string (UTF-8). */ public static function trimUtf8Bom($str) { return (substr($str, 0, 3) == pack('CCC', 239, 187, 191)) ? substr($str, 3) : $str;
|
}
}
| }
}
|