00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00019 final class TextUtils extends StaticFactory
00020 {
00021 public static function friendlyFileSize(
00022 $size, $precision = 2,
00023 $units = array(null, 'k' , 'M', 'G', 'T', 'P'),
00024 $spacePunctuation = false
00025 )
00026 {
00027 if ($size > 0) {
00028 $index = min((int) log($size, 1024), count($units) - 1);
00029
00030 return
00031 round($size / pow(1024, $index), $precision)
00032 .($spacePunctuation ? ' ' : null)
00033 .$units[$index];
00034 }
00035
00036 return 0;
00037 }
00038
00039 public static function getRootFromUrl($url)
00040 {
00041 if (
00042 strpos($url, '//') !== false
00043 && (strpos($url, '//') + 2) < strlen($url)
00044 )
00045 $offset = strpos($url, '//') + 2;
00046 else
00047 $offset = 0;
00048
00049 return substr($url, 0, strpos($url, '/', $offset) + 1);
00050 }
00051
00052 public static function getPathFromUrl($url)
00053 {
00054 $parsed = parse_url($url);
00055
00056 if ($parsed === false or !isset($parsed['path']))
00057 return '/';
00058 else
00059 return $parsed['path'];
00060 }
00061
00062 public static function urlSafeBase64Encode($string)
00063 {
00064 return
00065 str_replace(
00066 array('+', '/' , '='),
00067 array('-', '_', ''),
00068 base64_encode($string)
00069 );
00070 }
00071
00072 public static function urlSafeBase64Decode($string)
00073 {
00074 $data = str_replace(
00075 array('-', '_'),
00076 array('+', '/'),
00077 $string
00078 );
00079
00080 $mod4 = strlen($data) % 4;
00081
00082 if ($mod4) {
00083 $data .= substr('====', $mod4);
00084 }
00085
00086 return base64_decode($data);
00087 }
00088
00089 public static function upFirst($string)
00090 {
00091 $firstOne = mb_strtoupper(mb_substr($string, 0, 1));
00092
00093 return $firstOne.mb_substr($string, 1);
00094 }
00095
00096 public static function downFirst($string)
00097 {
00098 $firstOne = mb_strtolower(mb_substr($string, 0, 1));
00099
00100 return $firstOne.mb_substr($string, 1);
00101 }
00102
00103 public static function cutOnSpace($string, $length, $append = null)
00104 {
00105 $stringLength = mb_strlen($string);
00106
00107 if ($stringLength < $length)
00108 return $string;
00109 else {
00110 if (!$pos = mb_strpos($string, ' ', $length))
00111 $pos = $stringLength;
00112
00113 return mb_substr($string, 0, $pos).$append;
00114 }
00115 }
00116
00120 public static function normalizeUri($uri)
00121 {
00122 return GenericUri::create()->
00123 parse($uri, true)->
00124 normalize()->
00125 toString();
00126 }
00127
00128 public static function hex2Binary($hex)
00129 {
00130 $length = strlen($hex);
00131
00132 Assert::isEqual($length % 2, 0);
00133
00134 $out = null;
00135 for ($i = 0; $i < $length; $i += 2) {
00136 $out .= pack('C', hexdec(substr($hex, $i, 2)));
00137 }
00138
00139 return $out;
00140 }
00141
00150 public static function safeAmp($text)
00151 {
00152 $result = preg_replace(
00153 '/&(?!(#(([0-9]+)|(x[0-9A-F]+))'
00154 .'|([a-z][a-z0-9]*));)/i',
00155 '&',
00156 $text
00157 );
00158
00159 return $result;
00160 }
00161
00162 public static function friendlyNumber($number, $delimiter = ' ')
00163 {
00164 $localeInfo = localeconv();
00165
00166 $decimalPoint = $localeInfo['decimal_point'];
00167
00168 $number = (string) $number;
00169
00170 $parts = explode($decimalPoint, $number);
00171
00172 $integer = abs(array_shift($parts));
00173
00174 $minus = $number < 0 ? '-' : '';
00175
00176 $floatDiff = array_shift($parts);
00177
00178 if ($integer > 9999) {
00179 $orders = array();
00180
00181 while ($integer > 0) {
00182 $order = $integer % 1000;
00183 $integer = (int) ($integer / 1000);
00184
00185 if ($integer > 0)
00186 $orders[] = sprintf('%03d', $order);
00187 else
00188 $orders[] = (string) $order;
00189 }
00190
00191 $result = implode($delimiter, array_reverse($orders));
00192
00193 } else
00194 $result = (string) $integer;
00195
00196 if ($floatDiff)
00197 $result = $result.$decimalPoint.$floatDiff;
00198
00199 return $minus.$result;
00200 }
00201 }
00202 ?>