Как известно строковые функции PHP не правильно работают с русским текстом в кодировке UTF-8. Чтобы решить эту проблему предполагается использовать функции mb_string
, но тут проблема полностью не решается т.к. некоторых функций в нем нет. Далее представлены недостающие функции и примеры их работы.
Первый символ строки в верхний регистр, аналог функции ucfirst()
.
if (!function_exists('mb_ucfirst')) {
function mb_ucfirst($str, $enc = 'utf-8') {
return
mb_strtoupper(mb_substr($str, 0, 1, $enc), $enc) .
mb_substr($str, 1, mb_strlen($str, $enc), $enc);
}
}
Замена части строки, аналог функции substr_replace()
.
if (!function_exists('mb_substr_replace')) {
function mb_substr_replace($original, $replacement, $position, $length)
{
$startString = mb_substr($original, 0, $position, 'UTF-8');
$endString = mb_substr($original, $position + $length, mb_strlen($original), 'UTF-8');
$out = $startString . $replacement . $endString;
return $out;
}
}
Инверсия регистра.
function mb_invert_case($s) {
$o = '';
foreach (preg_split('/(?<!^)(?!$)/u', $s) as $v) {
$o .= (mb_strtolower($v) === $v) ? mb_strtoupper($v) : mb_strtolower($v);
}
return $o;
}
echo mb_invert_case('предложение'); // ПРЕДЛОЖЕНИЕ
echo mb_invert_case('ПРЕДЛОЖЕНИЕ'); // предложение
Дополнение строки, другой строкой, до заданной длины. Аналог функции str_pad()
.
Функция преобразует строку в массив. В PHP mb_str_split появилась с версии 7.4.
if (!function_exists('mb_str_split')) {
function mb_str_split($str, $l = 0) {
if ($l > 0) {
$ret = array();
$len = mb_strlen($str, "UTF-8");
for ($i = 0; $i < $len; $i += $l) {
$ret[] = mb_substr($str, $i, $l, "UTF-8");
}
return $ret;
}
return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
}
Результат работы функции:
$array = str_split('предложение');
print_r($array);
// Array
// (
// [0] => �
// [1] => �
// [2] => �
// [3] => �
// [4] => �
// [5] => �
// [6] => �
// [7] => �
// [8] => �
// [9] => �
// [10] => �
// [11] => �
// [12] => �
// [13] => �
// [14] => �
// [15] => �
// [16] => �
// [17] => �
// [18] => �
// [19] => �
// [20] => �
// [21] => �
// )
$array = mb_str_split('предложение');
print_r($array);
// Array
// (
// [0] => п
// [1] => р
// [2] => е
// [3] => д
// [4] => л
// [5] => о
// [6] => ж
// [7] => е
// [8] => н
// [9] => и
// [10] => е
// )