/** * UTF8::strcasecmp * * @package Kohana * @author Kohana Team * @copyright (c) 2007-2012 Kohana Team * @copyright (c) 2005 Harry Fuecks * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt */ function _strcasecmp($str1, $str2) { if (\Phalcana\UTF8::isAscii($str1) && \Phalcana\UTF8::isAscii($str2)) { return strcasecmp($str1, $str2); } $str1 = \Phalcana\UTF8::strtolower($str1); $str2 = \Phalcana\UTF8::strtolower($str2); return strcmp($str1, $str2); }
/** * UTF8::stristr * * @package Kohana * @author Kohana Team * @copyright (c) 2007-2012 Kohana Team * @copyright (c) 2005 Harry Fuecks * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt */ function _stristr($str, $search) { if (\Phalcana\UTF8::isAscii($str) && \Phalcana\UTF8::isAscii($search)) { return stristr($str, $search); } if ($search == '') { return $str; } $str_lower = \Phalcana\UTF8::strtolower($str); $search_lower = \Phalcana\UTF8::strtolower($search); preg_match('/^(.*?)' . preg_quote($search_lower, '/') . '/s', $str_lower, $matches); if (isset($matches[1])) { return substr($str, strlen($matches[1])); } return false; }
/** * Convert a phrase to a URL-safe title. * * echo URL::title('My Blog Post'); // "my-blog-post" * * @param string $title Phrase to convert * @param string $separators Word separator (any single character) * @param bool $ascii_only Transliterate to ASCII? * @return string */ public static function title($title, $separator = '-', $ascii_only = false) { if ($ascii_only === true) { // Transliterate non-ASCII characters $title = UTF8::transliterate_to_ascii($title); // Remove all characters that are not the separator, a-z, 0-9, or whitespace $title = preg_replace('![^' . preg_quote($separator) . 'a-z0-9\\s]+!', '', strtolower($title)); } else { // Remove all characters that are not the separator, letters, numbers, or whitespace $title = preg_replace('![^' . preg_quote($separator) . '\\pL\\pN\\s]+!u', '', UTF8::strtolower($title)); } // Replace all separator characters and whitespace by a single separator $title = preg_replace('![' . preg_quote($separator) . '\\s]+!u', $separator, $title); // Trim separators from the beginning and end return trim($title, $separator); }
/** * UTF8::strIreplace * * @package Kohana * @author Kohana Team * @copyright (c) 2007-2012 Kohana Team * @copyright (c) 2005 Harry Fuecks * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt */ function _strIreplace($search, $replace, $str, &$count = null) { if (\Phalcana\UTF8::isAscii($search) && \Phalcana\UTF8::isAscii($replace) && \Phalcana\UTF8::isAscii($str)) { return str_ireplace($search, $replace, $str, $count); } if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = \Phalcana\UTF8::strIreplace($search, $replace, $val, $count); } return $str; } if (is_array($search)) { $keys = array_keys($search); foreach ($keys as $k) { if (is_array($replace)) { if (array_key_exists($k, $replace)) { $str = \Phalcana\UTF8::strIreplace($search[$k], $replace[$k], $str, $count); } else { $str = \Phalcana\UTF8::strIreplace($search[$k], '', $str, $count); } } else { $str = \Phalcana\UTF8::strIreplace($search[$k], $replace, $str, $count); } } return $str; } $search = \Phalcana\UTF8::strtolower($search); $str_lower = \Phalcana\UTF8::strtolower($str); $total_matched_strlen = 0; $i = 0; while (preg_match('/(.*?)' . preg_quote($search, '/') . '/s', $str_lower, $matches)) { $matched_strlen = strlen($matches[0]); $str_lower = substr($str_lower, $matched_strlen); $offset = $total_matched_strlen + strlen($matches[1]) + $i * (strlen($replace) - 1); $str = substr_replace($str, $replace, $offset, strlen($search)); $total_matched_strlen += $matched_strlen; $i++; } $count += $i; return $str; }
/** * Tests UTF8::strtolower * * @test * @dataProvider provider_strtolower */ public function test_strtolower($input, $expected) { $this->assertSame($expected, UTF8::strtolower($input)); }