StringHelper.php 2.32 KB
Newer Older
Qiang Xue committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\helpers\base;

/**
 * StringHelper
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @author Alex Makarov <sam@rmcreative.ru>
 * @since 2.0
 */
class StringHelper
{
	/**
	 * Returns the number of bytes in the given string.
Qiang Xue committed
21
	 * This method ensures the string is treated as a byte array by using `mb_strlen()`.
Qiang Xue committed
22 23 24 25 26
	 * @param string $string the string being measured for length
	 * @return integer the number of bytes in the given string.
	 */
	public static function strlen($string)
	{
Qiang Xue committed
27
		return mb_strlen($string, '8bit');
Qiang Xue committed
28 29 30 31
	}

	/**
	 * Returns the portion of string specified by the start and length parameters.
Qiang Xue committed
32
	 * This method ensures the string is treated as a byte array by using `mb_substr()`.
Qiang Xue committed
33 34 35 36 37 38 39 40
	 * @param string $string the input string. Must be one character or longer.
	 * @param integer $start the starting position
	 * @param integer $length the desired portion length
	 * @return string the extracted part of string, or FALSE on failure or an empty string.
	 * @see http://www.php.net/manual/en/function.substr.php
	 */
	public static function substr($string, $start, $length)
	{
Qiang Xue committed
41
		return mb_substr($string, $start, $length, '8bit');
Qiang Xue committed
42 43
	}

44 45
	/**
	 * Returns the trailing name component of a path.
46
	 * This method does the same as the php function `basename()` except that it will
47
	 * always use \ and / as directory separators, independent of the operating system.
48 49
	 * This method was mainly created to work on php namespaces. When working with real
	 * file paths, php's `basename()` should work fine for you.
Qiang Xue committed
50
	 * Note: this method is not aware of the actual filesystem, or path components such as "..".
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
	 * @param string $path A path string.
	 * @param string $suffix If the name component ends in suffix this will also be cut off.
	 * @return string the trailing name component of the given path.
	 * @see http://www.php.net/manual/en/function.basename.php
	 */
	public static function basename($path, $suffix = '')
	{
		if (($len = mb_strlen($suffix)) > 0 && mb_substr($path, -$len) == $suffix) {
			$path = mb_substr($path, 0, -$len);
		}
		$path = rtrim(str_replace('\\', '/', $path), '/\\');
		if (($pos = mb_strrpos($path, '/')) !== false) {
			return mb_substr($path, $pos + 1);
		}
		return $path;
	}
Qiang Xue committed
67
}