additional multibyte string functions used throughout WackoWiki
((source:master/src/lib/mb_extends/mb_extends.php lib/mb_extends/mb_extends.php))
===Functions===
* ##utf8_count_chars()##
* ##utf8_ltrim()##
* ##utf8_rtrim()##
* ##utf8_str_pad()##
* ##utf8_substr_replace()##
* ##utf8_trim()##
* ##utf8_ucfirst()##
* ##utf8_ucwords()##
* ##utf8_wordwrap()##
===Unused===
%%(php)
<?php
function utf8_strtr($str, $from, $to)
{
$keys = [];
$values = [];
if (!is_array($from))
{
preg_match_all('/./u', $from, $keys);
preg_match_all('/./u', $to, $values);
$mapping = array_combine($keys[0], $values[0]);
}
else
{
$mapping = $from;
}
return strtr($str, $mapping);
}
function mb_strtr($str, $from, $to ,$chars = 'undefined')
{
$chars = mb_internal_encoding();
$_str = '';
$len = mb_strlen($str, $chars);
for($i = 0; $i < $len; $i++)
{
$flag = false;
for ($q = 0, $sf = mb_strlen($from, $chars), $st = mb_strlen($to, $chars); $q < $sf && $q < $st; $q++)
{
if (mb_substr($str, $i, 1, $chars) == mb_substr($from, $q, 1, $chars))
{
$_str = $_str . mb_substr($to, $q, 1, $chars);
$flag = true;
break;
}
}
if(!$flag)
{
$_str = $_str . mb_substr($str, $i, 1, $chars);
}
}
return $_str;
}
function mb_replace($search, $replace, $subject, &$count=0)
{
if (!is_array($search) && is_array($replace))
{
return false;
}
if (is_array($subject))
{
// call mb_replace for each single string in $subject
foreach ($subject as &$string)
{
$string = &mb_replace($search, $replace, $string, $c);
$count += $c;
}
}
else if (is_array($search))
{
if (!is_array($replace))
{
foreach ($search as &$string)
{
$subject = mb_replace($string, $replace, $subject, $c);
$count += $c;
}
}
else
{
$n = max(count($search), count($replace));
while ($n--)
{
$subject = mb_replace(current($search), current($replace), $subject, $c);
$count += $c;
next($search);
next($replace);
}
}
}
else
{
$parts = mb_split(preg_quote($search), $subject);
$count = count($parts) - 1;
$subject = implode($replace, $parts);
}
return $subject;
}
%%