/** * Finds position of last occurrence of a string within another, case insensitive * * @param string $haystack The string from which to get the position of the last occurrence of $needle. * @param string $needle The string to find in $haystack. * @param integer $offset The position in $haystack to start searching. * @return integer|boolean The numeric position of the last occurrence of $needle in the $haystack string, * or false if $needle is not found. * @access public * @static */ function strripos($haystack, $needle, $offset = 0) { if (!PHP5 || Multibyte::checkMultibyte($haystack)) { $found = false; $haystack = Multibyte::strtoupper($haystack); $haystack = Multibyte::utf8($haystack); $haystackCount = count($haystack); $matches = array_count_values($haystack); $needle = Multibyte::strtoupper($needle); $needle = Multibyte::utf8($needle); $needleCount = count($needle); $position = $offset; while ($found === false && $position < $haystackCount) { if (isset($needle[0]) && $needle[0] === $haystack[$position]) { for ($i = 1; $i < $needleCount; $i++) { if ($needle[$i] !== $haystack[$position + $i]) { if ($needle[$i] === $haystack[$position + $i - 1]) { $position--; $found = true; continue; } } } if (!$offset && isset($matches[$needle[0]]) && $matches[$needle[0]] > 1) { $matches[$needle[0]] = $matches[$needle[0]] - 1; } elseif ($i === $needleCount) { $found = true; $position--; } } $position++; } return $found ? $position : false; } return strripos($haystack, $needle, $offset); }
/** * testMultibyteStrtoupper method * * @return void */ public function testMultibyteStrtoupper() { $string = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'; $result = Multibyte::strtoupper($string); $expected = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~'; $this->assertEquals($expected, $result); $string = '!"#$%&\'()*+,-./0123456789:;<=>?@'; $result = Multibyte::strtoupper($string); $expected = '!"#$%&\'()*+,-./0123456789:;<=>?@'; $this->assertEquals($expected, $result); $string = 'à'; $result = Multibyte::strtoupper($string); $expected = 'À'; $this->assertEquals($expected, $result); $string = 'á'; $result = Multibyte::strtoupper($string); $expected = 'Á'; $this->assertEquals($expected, $result); $string = 'â'; $result = Multibyte::strtoupper($string); $expected = 'Â'; $this->assertEquals($expected, $result); $string = 'ã'; $result = Multibyte::strtoupper($string); $expected = 'Ã'; $this->assertEquals($expected, $result); $string = 'ä'; $result = Multibyte::strtoupper($string); $expected = 'Ä'; $this->assertEquals($expected, $result); $string = 'å'; $result = Multibyte::strtoupper($string); $expected = 'Å'; $this->assertEquals($expected, $result); $string = 'æ'; $result = Multibyte::strtoupper($string); $expected = 'Æ'; $this->assertEquals($expected, $result); $string = 'ç'; $result = Multibyte::strtoupper($string); $expected = 'Ç'; $this->assertEquals($expected, $result); $string = 'è'; $result = Multibyte::strtoupper($string); $expected = 'È'; $this->assertEquals($expected, $result); $string = 'é'; $result = Multibyte::strtoupper($string); $expected = 'É'; $this->assertEquals($expected, $result); $string = 'ê'; $result = Multibyte::strtoupper($string); $expected = 'Ê'; $this->assertEquals($expected, $result); $string = 'ë'; $result = Multibyte::strtoupper($string); $expected = 'Ë'; $this->assertEquals($expected, $result); $string = 'ì'; $result = Multibyte::strtoupper($string); $expected = 'Ì'; $this->assertEquals($expected, $result); $string = 'í'; $result = Multibyte::strtoupper($string); $expected = 'Í'; $this->assertEquals($expected, $result); $string = 'î'; $result = Multibyte::strtoupper($string); $expected = 'Î'; $this->assertEquals($expected, $result); $string = 'ï'; $result = Multibyte::strtoupper($string); $expected = 'Ï'; $this->assertEquals($expected, $result); $string = 'ð'; $result = Multibyte::strtoupper($string); $expected = 'Ð'; $this->assertEquals($expected, $result); $string = 'ñ'; $result = Multibyte::strtoupper($string); $expected = 'Ñ'; $this->assertEquals($expected, $result); $string = 'ò'; $result = Multibyte::strtoupper($string); $expected = 'Ò'; $this->assertEquals($expected, $result); $string = 'ó'; $result = Multibyte::strtoupper($string); $expected = 'Ó'; $this->assertEquals($expected, $result); $string = 'ô'; $result = Multibyte::strtoupper($string); $expected = 'Ô'; $this->assertEquals($expected, $result); $string = 'õ'; $result = Multibyte::strtoupper($string); $expected = 'Õ'; $this->assertEquals($expected, $result); $string = 'ö'; $result = Multibyte::strtoupper($string); $expected = 'Ö'; $this->assertEquals($expected, $result); $string = 'ø'; $result = Multibyte::strtoupper($string); $expected = 'Ø'; $this->assertEquals($expected, $result); $string = 'ù'; $result = Multibyte::strtoupper($string); $expected = 'Ù'; $this->assertEquals($expected, $result); $string = 'ú'; $result = Multibyte::strtoupper($string); $expected = 'Ú'; $this->assertEquals($expected, $result); $string = 'û'; $result = Multibyte::strtoupper($string); $expected = 'Û'; $this->assertEquals($expected, $result); $string = 'ü'; $result = Multibyte::strtoupper($string); $expected = 'Ü'; $this->assertEquals($expected, $result); $string = 'ý'; $result = Multibyte::strtoupper($string); $expected = 'Ý'; $this->assertEquals($expected, $result); $string = 'þ'; $result = Multibyte::strtoupper($string); $expected = 'Þ'; $this->assertEquals($expected, $result); $string = 'àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ'; $result = Multibyte::strtoupper($string); $expected = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ'; $this->assertEquals($expected, $result); $string = 'ā'; $result = Multibyte::strtoupper($string); $expected = 'Ā'; $this->assertEquals($expected, $result); $string = 'ă'; $result = Multibyte::strtoupper($string); $expected = 'Ă'; $this->assertEquals($expected, $result); $string = 'ą'; $result = Multibyte::strtoupper($string); $expected = 'Ą'; $this->assertEquals($expected, $result); $string = 'ć'; $result = Multibyte::strtoupper($string); $expected = 'Ć'; $this->assertEquals($expected, $result); $string = 'ĉ'; $result = Multibyte::strtoupper($string); $expected = 'Ĉ'; $this->assertEquals($expected, $result); $string = 'ċ'; $result = Multibyte::strtoupper($string); $expected = 'Ċ'; $this->assertEquals($expected, $result); $string = 'č'; $result = Multibyte::strtoupper($string); $expected = 'Č'; $this->assertEquals($expected, $result); $string = 'ď'; $result = Multibyte::strtoupper($string); $expected = 'Ď'; $this->assertEquals($expected, $result); $string = 'đ'; $result = Multibyte::strtoupper($string); $expected = 'Đ'; $this->assertEquals($expected, $result); $string = 'ē'; $result = Multibyte::strtoupper($string); $expected = 'Ē'; $this->assertEquals($expected, $result); $string = 'ĕ'; $result = Multibyte::strtoupper($string); $expected = 'Ĕ'; $this->assertEquals($expected, $result); $string = 'ė'; $result = Multibyte::strtoupper($string); $expected = 'Ė'; $this->assertEquals($expected, $result); $string = 'ę'; $result = Multibyte::strtoupper($string); $expected = 'Ę'; $this->assertEquals($expected, $result); $string = 'ě'; $result = Multibyte::strtoupper($string); $expected = 'Ě'; $this->assertEquals($expected, $result); $string = 'ĝ'; $result = Multibyte::strtoupper($string); $expected = 'Ĝ'; $this->assertEquals($expected, $result); $string = 'ğ'; $result = Multibyte::strtoupper($string); $expected = 'Ğ'; $this->assertEquals($expected, $result); $string = 'ġ'; $result = Multibyte::strtoupper($string); $expected = 'Ġ'; $this->assertEquals($expected, $result); $string = 'ģ'; $result = Multibyte::strtoupper($string); $expected = 'Ģ'; $this->assertEquals($expected, $result); $string = 'ĥ'; $result = Multibyte::strtoupper($string); $expected = 'Ĥ'; $this->assertEquals($expected, $result); $string = 'ħ'; $result = Multibyte::strtoupper($string); $expected = 'Ħ'; $this->assertEquals($expected, $result); $string = 'ĩ'; $result = Multibyte::strtoupper($string); $expected = 'Ĩ'; $this->assertEquals($expected, $result); $string = 'ī'; $result = Multibyte::strtoupper($string); $expected = 'Ī'; $this->assertEquals($expected, $result); $string = 'ĭ'; $result = Multibyte::strtoupper($string); $expected = 'Ĭ'; $this->assertEquals($expected, $result); $string = 'į'; $result = Multibyte::strtoupper($string); $expected = 'Į'; $this->assertEquals($expected, $result); $string = 'ij'; $result = Multibyte::strtoupper($string); $expected = 'IJ'; $this->assertEquals($expected, $result); $string = 'ĵ'; $result = Multibyte::strtoupper($string); $expected = 'Ĵ'; $this->assertEquals($expected, $result); $string = 'ķ'; $result = Multibyte::strtoupper($string); $expected = 'Ķ'; $this->assertEquals($expected, $result); $string = 'ĺ'; $result = Multibyte::strtoupper($string); $expected = 'Ĺ'; $this->assertEquals($expected, $result); $string = 'ļ'; $result = Multibyte::strtoupper($string); $expected = 'Ļ'; $this->assertEquals($expected, $result); $string = 'ľ'; $result = Multibyte::strtoupper($string); $expected = 'Ľ'; $this->assertEquals($expected, $result); $string = 'ŀ'; $result = Multibyte::strtoupper($string); $expected = 'Ŀ'; $this->assertEquals($expected, $result); $string = 'ł'; $result = Multibyte::strtoupper($string); $expected = 'Ł'; $this->assertEquals($expected, $result); $string = 'ń'; $result = Multibyte::strtoupper($string); $expected = 'Ń'; $this->assertEquals($expected, $result); $string = 'ņ'; $result = Multibyte::strtoupper($string); $expected = 'Ņ'; $this->assertEquals($expected, $result); $string = 'ň'; $result = Multibyte::strtoupper($string); $expected = 'Ň'; $this->assertEquals($expected, $result); $string = 'ŋ'; $result = Multibyte::strtoupper($string); $expected = 'Ŋ'; $this->assertEquals($expected, $result); $string = 'ō'; $result = Multibyte::strtoupper($string); $expected = 'Ō'; $this->assertEquals($expected, $result); $string = 'ŏ'; $result = Multibyte::strtoupper($string); $expected = 'Ŏ'; $this->assertEquals($expected, $result); $string = 'ő'; $result = Multibyte::strtoupper($string); $expected = 'Ő'; $this->assertEquals($expected, $result); $string = 'œ'; $result = Multibyte::strtoupper($string); $expected = 'Œ'; $this->assertEquals($expected, $result); $string = 'ŕ'; $result = Multibyte::strtoupper($string); $expected = 'Ŕ'; $this->assertEquals($expected, $result); $string = 'ŗ'; $result = Multibyte::strtoupper($string); $expected = 'Ŗ'; $this->assertEquals($expected, $result); $string = 'ř'; $result = Multibyte::strtoupper($string); $expected = 'Ř'; $this->assertEquals($expected, $result); $string = 'ś'; $result = Multibyte::strtoupper($string); $expected = 'Ś'; $this->assertEquals($expected, $result); $string = 'ŝ'; $result = Multibyte::strtoupper($string); $expected = 'Ŝ'; $this->assertEquals($expected, $result); $string = 'ş'; $result = Multibyte::strtoupper($string); $expected = 'Ş'; $this->assertEquals($expected, $result); $string = 'š'; $result = Multibyte::strtoupper($string); $expected = 'Š'; $this->assertEquals($expected, $result); $string = 'ţ'; $result = Multibyte::strtoupper($string); $expected = 'Ţ'; $this->assertEquals($expected, $result); $string = 'ť'; $result = Multibyte::strtoupper($string); $expected = 'Ť'; $this->assertEquals($expected, $result); $string = 'ŧ'; $result = Multibyte::strtoupper($string); $expected = 'Ŧ'; $this->assertEquals($expected, $result); $string = 'ũ'; $result = Multibyte::strtoupper($string); $expected = 'Ũ'; $this->assertEquals($expected, $result); $string = 'ū'; $result = Multibyte::strtoupper($string); $expected = 'Ū'; $this->assertEquals($expected, $result); $string = 'ŭ'; $result = Multibyte::strtoupper($string); $expected = 'Ŭ'; $this->assertEquals($expected, $result); $string = 'ů'; $result = Multibyte::strtoupper($string); $expected = 'Ů'; $this->assertEquals($expected, $result); $string = 'ű'; $result = Multibyte::strtoupper($string); $expected = 'Ű'; $this->assertEquals($expected, $result); $string = 'ų'; $result = Multibyte::strtoupper($string); $expected = 'Ų'; $this->assertEquals($expected, $result); $string = 'ŵ'; $result = Multibyte::strtoupper($string); $expected = 'Ŵ'; $this->assertEquals($expected, $result); $string = 'ŷ'; $result = Multibyte::strtoupper($string); $expected = 'Ŷ'; $this->assertEquals($expected, $result); $string = 'ź'; $result = Multibyte::strtoupper($string); $expected = 'Ź'; $this->assertEquals($expected, $result); $string = 'ż'; $result = Multibyte::strtoupper($string); $expected = 'Ż'; $this->assertEquals($expected, $result); $string = 'ž'; $result = Multibyte::strtoupper($string); $expected = 'Ž'; $this->assertEquals($expected, $result); $string = 'āăąćĉċčďđēĕėęěĝğġģĥħĩīĭįijĵķĺļľŀłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž'; $result = Multibyte::strtoupper($string); $expected = 'ĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŹŻŽ'; $this->assertEquals($expected, $result); $string = 'Ĥēĺļŏ, Ŵőřļď!'; $result = Multibyte::strtoupper($string); $expected = 'ĤĒĹĻŎ, ŴŐŘĻĎ!'; $this->assertEquals($expected, $result); $string = 'ἀι'; $result = mb_strtoupper($string); $expected = 'ἈΙ'; $this->assertEquals($expected, $result); $string = 'ἀι'; $result = Multibyte::strtoupper($string); $expected = 'ἈΙ'; $this->assertEquals($expected, $result); $string = 'ԁԃԅԇԉԋԍԏԐԒ'; $result = Multibyte::strtoupper($string); $expected = 'ԀԂԄԆԈԊԌԎԐԒ'; $this->assertEquals($expected, $result); $string = 'աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև'; $result = Multibyte::strtoupper($string); $expected = 'ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖև'; $this->assertEquals($expected, $result); $string = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; $result = Multibyte::strtoupper($string); $expected = 'ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ'; $this->assertEquals($expected, $result); $string = 'ḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕẖẗẘẙẚạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ'; $result = Multibyte::strtoupper($string); $expected = 'ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẖẗẘẙẚẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸ'; $this->assertEquals($expected, $result); $string = 'ωkåⅎ'; $result = Multibyte::strtoupper($string); $expected = 'ΩKÅℲ'; $this->assertEquals($expected, $result); $string = 'ωkå'; $result = Multibyte::strtoupper($string); $expected = 'ΩKÅ'; $this->assertEquals($expected, $result); $string = 'ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↄ'; $result = Multibyte::strtoupper($string); $expected = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃ'; $this->assertEquals($expected, $result); $string = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ'; $result = Multibyte::strtoupper($string); $expected = 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ'; $this->assertEquals($expected, $result); $string = 'ⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞ'; $result = Multibyte::strtoupper($string); $expected = 'ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮ'; $this->assertEquals($expected, $result); $string = 'ⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣ'; $result = Multibyte::strtoupper($string); $expected = 'ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢ'; $this->assertEquals($expected, $result); $string = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; $result = Multibyte::strtoupper($string); $expected = 'fffiflffifflſtstﬓﬔﬕﬖﬗ'; $this->assertEquals($expected, $result); }
/** * Make a string uppercase * * @param string $string The string being uppercased. * @param string $encoding Character encoding name to use. If it is omitted, internal character encoding is used. * @return string with all alphabetic characters converted to uppercase. */ function mb_strtoupper($string, $encoding = null) { return Multibyte::strtoupper($string); }