Дополнительные функции mb_string

Как известно строковые функции PHP не правильно работают с русским текстом в кодировке UTF-8. Чтобы решить эту проблему предполагается использовать функции mb_string, но тут проблема полностью не решается т.к. некоторых функций в нем нет. Далее представлены недостающие функции и примеры их работы.

1

Первый символ строки в верхний регистр, аналог функции 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);
	}
}
PHP
echo ucfirst('русский текст');    // русский текст
echo mb_ucfirst('русский текст'); // Русский текст
PHP
2

Замена части строки, аналог функции 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;
	}
}
PHP
echo substr_replace('Предложение на русском языке', 'английском', 15, 7); 
// Предлож�английском на русском языке

echo mb_substr_replace('Предложение на русском языке', 'английском', 15, 7); 
// Предложение на английском языке
PHP
3

Инверсия регистра.

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;
}
PHP
echo mb_invert_case('предложение'); // ПРЕДЛОЖЕНИЕ
echo mb_invert_case('ПРЕДЛОЖЕНИЕ'); // предложение
PHP
4

Дополнение строки, другой строкой, до заданной длины. Аналог функции str_pad().

function mb_str_pad($input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT)
{
	$diff = strlen($input) - mb_strlen($input);
	return str_pad($input, $pad_length + $diff, $pad_string, $pad_type);
}
PHP
5

Функция преобразует строку в массив. В 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);
	}
}
PHP

Результат работы функции:

$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] => е
// )
PHP
18.12.2016, обновлено 20.11.2021
9331

Комментарии

, чтобы добавить комментарий.

Другие публикации

Замена регистра в строках PHP
Список PHP-функций для изменения регистра символов в строках и примеры их использования.
18138
+1
Сумма прописью PHP
В PHP 5.3 появился класс NumberFormatter для форматирования чисел и денежных единиц в нужной локали. На его основе была написана функция со склонением слова «рубль».
17828
+6
Генерация счета на оплату PDF PHP
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
72413
+35
Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
16981
-1
Генерация паролей в PHP
В PHP есть несколько функций для генерации случайного числа, это rand(), mt_rand() и random_int().
25003
+11
Поиск похожих текстов в базе данных MySQL + PHP
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
8207
+6