20251001-1
This commit is contained in:
136
anb_python_components/extensions/StringExtension.php
Normal file
136
anb_python_components/extensions/StringExtension.php
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_components_pack\extensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Расширение строк.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
final class StringExtension
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сравнивает две строки.
|
||||||
|
*
|
||||||
|
* @param string|null $str1 Первая строка.
|
||||||
|
* @param string|null $str2 Вторая строка.
|
||||||
|
* @param bool $ignoreCase Игнорировать регистр.
|
||||||
|
*
|
||||||
|
* @return int Результат сравнения. Возвращаемые значения:
|
||||||
|
*
|
||||||
|
* -1 | значение $str1 меньше значения $str2.
|
||||||
|
* 0 | значения $str1 и $str2 равны.
|
||||||
|
* 1 | значение $str1 больше значения $str2.
|
||||||
|
*/
|
||||||
|
public static function Compare (string|null $str1, string|null $str2, bool $ignoreCase = false): int
|
||||||
|
{
|
||||||
|
// Если оба пусты
|
||||||
|
if (self::IsNullOrWhitespace($str1) && self::IsNullOrWhitespace($str2))
|
||||||
|
// - то равны
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Если первый из них не пуст, а второй пуст
|
||||||
|
if (!self::IsNullOrWhitespace($str1) && self::IsNullOrWhitespace($str2))
|
||||||
|
// - то первый больше
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
// Если первый из них пуст, а второй не пуст
|
||||||
|
if (!self::IsNullOrWhitespace($str1) && self::IsNullOrWhitespace($str2))
|
||||||
|
// - то первый меньше
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Если нужно игнорировать регистр
|
||||||
|
if ($ignoreCase)
|
||||||
|
// - то сравниваем по "человечески" без учёта регистра
|
||||||
|
return strnatcasecmp($str1, $str2);
|
||||||
|
|
||||||
|
// Иначе сравниваем по "человечески" с учётом регистра
|
||||||
|
return strnatcmp($str1, $str2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Обрезает строку до указанных в параметре $maxLength символов
|
||||||
|
*
|
||||||
|
* @param string $text Исходный текст
|
||||||
|
* @param int $maxLength Максимальная длина текста
|
||||||
|
* @param string $endDots Суффикс, которым завершается обрезанная строка
|
||||||
|
*
|
||||||
|
* @return string Обрезанный текст
|
||||||
|
*/
|
||||||
|
public static function GetShortText (string $text, int $maxLength, string $endDots = ''): string
|
||||||
|
{
|
||||||
|
// Если длина текста меньше максимальной
|
||||||
|
if (mb_strlen($text) <= $maxLength)
|
||||||
|
// - то возвращаю исходный текст
|
||||||
|
return $text;
|
||||||
|
|
||||||
|
// Если длина текста больше максимальной, то получаю длину текста без суффикса
|
||||||
|
$lengthWithoutEndDots = $maxLength - mb_strlen($endDots);
|
||||||
|
|
||||||
|
// Возвращаю обрезанный текст
|
||||||
|
return mb_substr($text, 0, $lengthWithoutEndDots) . $endDots;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Функция заменяет все вхождения строк поиск на соответствующие строки замены в заданной строке.
|
||||||
|
*
|
||||||
|
* @param array $searchReplace Массив с парами поиска и замены. Например, <code>['-' => '#', '$' => '%']</code>
|
||||||
|
* заменит все дефисы на # и все доллары на %.
|
||||||
|
* @param string $subject Строка, в которой нужно выполнить замену.
|
||||||
|
* @param string $encoding (необязательный) Кодировка (по умолчанию, UTF-8).
|
||||||
|
*
|
||||||
|
* @return string Возвращает новую строку с выполненными заменами.
|
||||||
|
*/
|
||||||
|
public static function ReplaceAll (array $searchReplace, string $subject, string $encoding = 'UTF-8'): string
|
||||||
|
{
|
||||||
|
// Создаю результат
|
||||||
|
$result = $subject;
|
||||||
|
|
||||||
|
// Для каждой пары поиска и замены
|
||||||
|
foreach ($searchReplace as $search => $replace)
|
||||||
|
// - заменяю все вхождения строки поиска на строку замены в заданной строке
|
||||||
|
$result = self::Replace($search, $replace, $result, $encoding);
|
||||||
|
|
||||||
|
// Возвращаю результат
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Функция заменяет все вхождения строки поиска на строку замены в заданной строке (аналог mb_str_replace).
|
||||||
|
*
|
||||||
|
* @param string $search Строка, которую нужно найти и заменить.
|
||||||
|
* @param string $replace Строка, на которую нужно заменить найденную строку.
|
||||||
|
* @param string $subject Строка, в которой нужно выполнить замену.
|
||||||
|
* @param string $encoding (необязательный) Кодировка (по умолчанию, UTF-8).
|
||||||
|
*
|
||||||
|
* @return string Возвращает новую строку с выполненной заменой.
|
||||||
|
*/
|
||||||
|
public static function Replace (string $search, string $replace, string $subject,
|
||||||
|
string $encoding = 'UTF-8'): string
|
||||||
|
{
|
||||||
|
// Если кодировка не UTF-8
|
||||||
|
if ($encoding != 'UTF-8') {
|
||||||
|
// - то перекодируем строку поиска, замены и исходную строку в UTF-8
|
||||||
|
$search = mb_convert_encoding($search, 'UTF-8', $encoding);
|
||||||
|
// - и перекодируем строку замены в UTF-8
|
||||||
|
$replace = mb_convert_encoding($replace, 'UTF-8', $encoding);
|
||||||
|
// - и перекодируем исходную строку в UTF-8
|
||||||
|
$subject = mb_convert_encoding($subject, 'UTF-8', $encoding);
|
||||||
|
}
|
||||||
|
|
||||||
|
// С помощью регулярного выражения заменяем все вхождения строки поиска на строку замены
|
||||||
|
$result = preg_replace('/' . preg_quote($search, '/') . '/u', $replace, $subject);
|
||||||
|
|
||||||
|
// Если кодировка не UTF-8
|
||||||
|
if ($encoding != 'UTF-8')
|
||||||
|
// - то перекодируем результат в исходную кодировку
|
||||||
|
$result = mb_convert_encoding($result, $encoding, 'UTF-8');
|
||||||
|
|
||||||
|
// Возвращаем результат
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
@@ -1,7 +1,6 @@
|
|||||||
# anb_python_components/extensions/string_extension.py
|
# anb_python_components/extensions/string_extension.py
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from string_extension_constant import StringExtensionConstant
|
from string_extension_constant import StringExtensionConstants
|
||||||
|
|
||||||
|
|
||||||
class StringExtension:
|
class StringExtension:
|
||||||
@@ -15,557 +14,84 @@ class StringExtension:
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
def is_null_or_empty(cls, text: str) -> bool:
|
def is_null_or_empty(cls, text: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Проверяет, пуста ли строка.
|
Проверяет, пуста ли строка.
|
||||||
:param str: Проверяемая строка.
|
:param text: Проверяемая строка.
|
||||||
:return: Результат проверки.
|
:return: Результат проверки.
|
||||||
"""
|
"""
|
||||||
return text is None or text == ""
|
return text is None or text == ""
|
||||||
|
|
||||||
def is_null_or_whitespace (cls, text: str) -> bool:
|
@classmethod
|
||||||
|
def is_null_or_whitespace(cls, text: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Проверяет, пуста ли строка, содержит ли вместо текста только пробелы.
|
Проверяет, пуста ли строка, содержит ли вместо текста только пробелы.
|
||||||
:param text: Проверяемая строка.
|
:param text: Проверяемая строка.
|
||||||
:return: bool Результат проверки. :rtype: bool
|
:return: Bool Результат проверки.
|
||||||
"""
|
"""
|
||||||
return cls.is_null_or_empty(text) or text.strip() == ''
|
return cls.is_null_or_empty(text) or text.strip() == ''
|
||||||
|
|
||||||
def Compare(self, str1, str2, ignore_case=False):
|
@classmethod
|
||||||
("""
|
def is_russian_letter(cls, letter: str) -> bool:
|
||||||
Сравнивает две строки.
|
"""
|
||||||
:param str1: Первая строка.
|
Проверяет, является ли символ русским буквой.
|
||||||
:param str2: Вторая строка.
|
:param letter: Проверяемый символ.
|
||||||
:param ignore_case: Игнорировать регистр. По умолчанию, False.
|
:return: Результат проверки.
|
||||||
:return: Результат сравнения. Возвращаемые значения:
|
|
||||||
-1 | значение $str1 меньше значения $str2.
|
|
||||||
0 | значения $str1 и $str2 равны.
|
|
||||||
1 | значение $str1 больше значения $str2.
|
|
||||||
"""
|
"""
|
||||||
# Если обе строки пусты
|
|
||||||
# if (self::IsNullOrWhitespace($str1) and self::sNullOrWhitespace($str2)):
|
|
||||||
# // - то равны 0
|
|
||||||
# return 0;
|
|
||||||
|
|
||||||
// Если
|
return letter in StringExtensionConstants.russian_letters
|
||||||
первый
|
|
||||||
из
|
|
||||||
них
|
|
||||||
не
|
|
||||||
пуст, а
|
|
||||||
второй
|
|
||||||
пуст
|
|
||||||
if (!self::IsNullOrWhitespace($str1) & & self: :
|
|
||||||
IsNullOrWhitespace($str2))
|
|
||||||
// - то
|
|
||||||
первый
|
|
||||||
больше
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
// Если
|
@classmethod
|
||||||
первый
|
def get_russian_letter_transliteration(cls, letter: str) -> bool | None:
|
||||||
из
|
"""
|
||||||
них
|
Получаю транслитерированную букву русского алфавита.
|
||||||
пуст, а
|
:param letter: Буква русского алфавита.
|
||||||
второй
|
:return: Транслитерированная буква.
|
||||||
не
|
"""
|
||||||
пуст
|
# Если размерность массивов разная
|
||||||
if (!self::IsNullOrWhitespace($str1) & & self: :
|
if (len(StringExtensionConstants.russian_letters) !=
|
||||||
IsNullOrWhitespace($str2))
|
len(StringExtensionConstants.russian_letters_transliteration)):
|
||||||
// - то
|
# - то вывожу ошибку
|
||||||
первый
|
return None
|
||||||
меньше
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
// Если
|
# Получаю индекс буквы
|
||||||
нужно
|
ind = StringExtensionConstants.russian_letters.find(letter)
|
||||||
игнорировать
|
|
||||||
регистр
|
|
||||||
if ($ignoreCase)
|
|
||||||
// - то
|
|
||||||
сравниваем
|
|
||||||
по
|
|
||||||
"человечески"
|
|
||||||
без
|
|
||||||
учёта
|
|
||||||
регистра
|
|
||||||
return strnatcasecmp($str1, $str2);
|
|
||||||
|
|
||||||
// Иначе
|
# Если индекс буквы не найден
|
||||||
сравниваем
|
if ind == -1:
|
||||||
по
|
# - то вывожу ошибку
|
||||||
"человечески"
|
return None
|
||||||
с
|
|
||||||
учётом
|
|
||||||
регистра
|
|
||||||
return strnatcmp($str1, $str2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
# Получаю транслитерированную букву
|
||||||
|
return StringExtensionConstants.russian_letters[ind]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def convert_to_latin(cls, source: str) -> str:
|
||||||
|
"""
|
||||||
|
Конвертация в латиницу.
|
||||||
|
:param source: Исходная строка.
|
||||||
|
:return: Результат перевода.
|
||||||
|
"""
|
||||||
|
# Создаю результат
|
||||||
|
result = ""
|
||||||
|
|
||||||
|
# Получаю длину строкиДля каждой буквы или символа из слова
|
||||||
|
for i, letter in enumerate(source):
|
||||||
|
if cls.is_russian_letter(letter):
|
||||||
|
# - транслитерирую эту букву
|
||||||
|
result_transliteration = cls.get_russian_letter_transliteration(letter)
|
||||||
|
|
||||||
|
# - если транслитерация не удалась
|
||||||
|
if result_transliteration is None:
|
||||||
|
# -- вывожу оригинальную букву
|
||||||
|
result += letter
|
||||||
|
else:
|
||||||
|
# -- вывожу транслитерированную букву
|
||||||
|
result += result_transliteration
|
||||||
|
else:
|
||||||
|
# - иначе вывожу букву или символ
|
||||||
|
result += letter
|
||||||
|
|
||||||
/ **
|
# Вывожу результат
|
||||||
*Конвертация
|
return result
|
||||||
в
|
|
||||||
латиницу.
|
|
||||||
*
|
|
||||||
* @ param
|
|
||||||
string $source
|
|
||||||
Исходное
|
|
||||||
слово
|
|
||||||
или
|
|
||||||
выражение
|
|
||||||
*
|
|
||||||
* @
|
|
||||||
return string
|
|
||||||
Транслитерированное
|
|
||||||
слово
|
|
||||||
или
|
|
||||||
выражение
|
|
||||||
* /
|
|
||||||
public
|
|
||||||
static
|
|
||||||
function
|
|
||||||
ConvertToLatin(string $source): string
|
|
||||||
{
|
|
||||||
// Создаю
|
|
||||||
результат
|
|
||||||
$result = "";
|
|
||||||
|
|
||||||
// Длина
|
|
||||||
исходного
|
|
||||||
слова
|
|
||||||
$length = mb_strlen($source);
|
|
||||||
|
|
||||||
// Для
|
|
||||||
каждой
|
|
||||||
буквы
|
|
||||||
или
|
|
||||||
символа
|
|
||||||
из
|
|
||||||
слова
|
|
||||||
for ($i = 0; $i < $length; $i++) {
|
|
||||||
// - получаю букву или символ
|
|
||||||
$letter = mb_substr($source, $i, 1);
|
|
||||||
|
|
||||||
// - если это буква из русского алфавита
|
|
||||||
if (self::
|
|
||||||
IsRussianLetter($letter)) {
|
|
||||||
// -- транслитерирую
|
|
||||||
эту
|
|
||||||
букву
|
|
||||||
$resultTransliteration = self::TransliterationFromRussian($letter);
|
|
||||||
|
|
||||||
// -- если
|
|
||||||
транслитерация
|
|
||||||
не
|
|
||||||
удалась
|
|
||||||
if ($resultTransliteration == = false)
|
|
||||||
// --- вывожу
|
|
||||||
оригинальную
|
|
||||||
букву
|
|
||||||
$result = $result. $letter;
|
|
||||||
else
|
|
||||||
// --- вывожу
|
|
||||||
транслитерированную
|
|
||||||
букву
|
|
||||||
$result = $result. $resultTransliteration;
|
|
||||||
|
|
||||||
// -- и
|
|
||||||
иду
|
|
||||||
к
|
|
||||||
следующей
|
|
||||||
букве
|
|
||||||
или
|
|
||||||
символу
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// - если
|
|
||||||
до
|
|
||||||
сих
|
|
||||||
пор
|
|
||||||
буква
|
|
||||||
или
|
|
||||||
символ
|
|
||||||
не
|
|
||||||
обработаны, то
|
|
||||||
возвращаю
|
|
||||||
их
|
|
||||||
$result = $result. $letter;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Вывожу
|
|
||||||
результат
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/ **
|
|
||||||
*Проверяет, является
|
|
||||||
ли
|
|
||||||
буква
|
|
||||||
русской.
|
|
||||||
*
|
|
||||||
* @ param
|
|
||||||
string $letter
|
|
||||||
Буква
|
|
||||||
*
|
|
||||||
* @
|
|
||||||
return bool
|
|
||||||
Является
|
|
||||||
ли
|
|
||||||
буква
|
|
||||||
русской
|
|
||||||
* /
|
|
||||||
private
|
|
||||||
static
|
|
||||||
function
|
|
||||||
IsRussianLetter(string $letter): bool
|
|
||||||
{
|
|
||||||
return in_array($letter, self::$RussianLetters);
|
|
||||||
}
|
|
||||||
|
|
||||||
/ **
|
|
||||||
*Получаю
|
|
||||||
транслитерированную
|
|
||||||
букву
|
|
||||||
русского
|
|
||||||
алфавита.
|
|
||||||
*
|
|
||||||
* @ param
|
|
||||||
string $letter
|
|
||||||
Буква
|
|
||||||
*
|
|
||||||
* @
|
|
||||||
return false | string
|
|
||||||
Транслитерированная
|
|
||||||
буква
|
|
||||||
или
|
|
||||||
false, если
|
|
||||||
массивы
|
|
||||||
не
|
|
||||||
совпадают
|
|
||||||
или
|
|
||||||
буква
|
|
||||||
не
|
|
||||||
содержится
|
|
||||||
*в
|
|
||||||
массивах.
|
|
||||||
* /
|
|
||||||
private
|
|
||||||
static
|
|
||||||
function
|
|
||||||
TransliterationFromRussian(string $letter): false | string
|
|
||||||
{
|
|
||||||
// Если
|
|
||||||
размерность
|
|
||||||
массивов
|
|
||||||
разная
|
|
||||||
if (count(self::$RussianLetters) != = count(self::$RussianLettersTransliteration))
|
|
||||||
// - то
|
|
||||||
вывожу
|
|
||||||
ошибку
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Получаю
|
|
||||||
индекс
|
|
||||||
буквы
|
|
||||||
$ind = array_search($letter, self::$RussianLetters, true);
|
|
||||||
|
|
||||||
// Если
|
|
||||||
буква
|
|
||||||
не
|
|
||||||
найдена
|
|
||||||
if ($ind == = false)
|
|
||||||
// - то
|
|
||||||
вывожу
|
|
||||||
ошибку
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Получаю
|
|
||||||
транслитерированную
|
|
||||||
букву
|
|
||||||
return self::$RussianLettersTransliteration[$ind];
|
|
||||||
}
|
|
||||||
|
|
||||||
/ **
|
|
||||||
*Обрезает
|
|
||||||
строку
|
|
||||||
до
|
|
||||||
указанных
|
|
||||||
в
|
|
||||||
параметре $maxLength
|
|
||||||
символов
|
|
||||||
*
|
|
||||||
* @ param
|
|
||||||
string $text
|
|
||||||
Исходный
|
|
||||||
текст
|
|
||||||
* @ param
|
|
||||||
int $maxLength
|
|
||||||
Максимальная
|
|
||||||
длина
|
|
||||||
текста
|
|
||||||
* @ param
|
|
||||||
string $endDots
|
|
||||||
Суффикс, которым
|
|
||||||
завершается
|
|
||||||
обрезанная
|
|
||||||
строка
|
|
||||||
*
|
|
||||||
* @
|
|
||||||
return string
|
|
||||||
Обрезанный
|
|
||||||
текст
|
|
||||||
* /
|
|
||||||
public
|
|
||||||
static
|
|
||||||
function
|
|
||||||
GetShortText(string $text, int $maxLength, string $endDots = ''): string
|
|
||||||
{
|
|
||||||
// Если
|
|
||||||
длина
|
|
||||||
текста
|
|
||||||
меньше
|
|
||||||
максимальной
|
|
||||||
if (mb_strlen($text) <= $maxLength)
|
|
||||||
// - то
|
|
||||||
возвращаю
|
|
||||||
исходный
|
|
||||||
текст
|
|
||||||
return $text;
|
|
||||||
|
|
||||||
// Если
|
|
||||||
длина
|
|
||||||
текста
|
|
||||||
больше
|
|
||||||
максимальной, то
|
|
||||||
получаю
|
|
||||||
длину
|
|
||||||
текста
|
|
||||||
без
|
|
||||||
суффикса
|
|
||||||
$lengthWithoutEndDots = $maxLength - mb_strlen($endDots);
|
|
||||||
|
|
||||||
// Возвращаю
|
|
||||||
обрезанный
|
|
||||||
текст
|
|
||||||
return mb_substr($text, 0, $lengthWithoutEndDots).$endDots;
|
|
||||||
}
|
|
||||||
|
|
||||||
/ **
|
|
||||||
*Функция
|
|
||||||
заменяет
|
|
||||||
все
|
|
||||||
вхождения
|
|
||||||
строк
|
|
||||||
поиск
|
|
||||||
на
|
|
||||||
соответствующие
|
|
||||||
строки
|
|
||||||
замены
|
|
||||||
в
|
|
||||||
заданной
|
|
||||||
строке.
|
|
||||||
*
|
|
||||||
* @ param
|
|
||||||
array $searchReplace
|
|
||||||
Массив
|
|
||||||
с
|
|
||||||
парами
|
|
||||||
поиска
|
|
||||||
и
|
|
||||||
замены.Например, < code > ['-' = > '#', '$' = > '%'] < / code >
|
|
||||||
*заменит
|
|
||||||
все
|
|
||||||
дефисы
|
|
||||||
на # и все доллары на %.
|
|
||||||
* @ param
|
|
||||||
string $subject
|
|
||||||
Строка, в
|
|
||||||
которой
|
|
||||||
нужно
|
|
||||||
выполнить
|
|
||||||
замену.
|
|
||||||
* @ param
|
|
||||||
string $encoding(необязательный)
|
|
||||||
Кодировка(по
|
|
||||||
умолчанию, UTF - 8).
|
|
||||||
*
|
|
||||||
*
|
|
||||||
|
|
||||||
@
|
|
||||||
|
|
||||||
|
|
||||||
return string
|
|
||||||
Возвращает
|
|
||||||
новую
|
|
||||||
строку
|
|
||||||
с
|
|
||||||
выполненными
|
|
||||||
заменами.
|
|
||||||
* /
|
|
||||||
public
|
|
||||||
static
|
|
||||||
function
|
|
||||||
ReplaceAll(array $searchReplace, string $subject, string $encoding = 'UTF-8'): string
|
|
||||||
{
|
|
||||||
// Создаю
|
|
||||||
результат
|
|
||||||
$result = $subject;
|
|
||||||
|
|
||||||
// Для
|
|
||||||
каждой
|
|
||||||
пары
|
|
||||||
поиска
|
|
||||||
и
|
|
||||||
замены
|
|
||||||
foreach($searchReplace as $search = > $replace)
|
|
||||||
// - заменяю
|
|
||||||
все
|
|
||||||
вхождения
|
|
||||||
строки
|
|
||||||
поиска
|
|
||||||
на
|
|
||||||
строку
|
|
||||||
замены
|
|
||||||
в
|
|
||||||
заданной
|
|
||||||
строке
|
|
||||||
$result = self::Replace($search, $replace, $result, $encoding);
|
|
||||||
|
|
||||||
// Возвращаю
|
|
||||||
результат
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/ **
|
|
||||||
*Функция
|
|
||||||
заменяет
|
|
||||||
все
|
|
||||||
вхождения
|
|
||||||
строки
|
|
||||||
поиска
|
|
||||||
на
|
|
||||||
строку
|
|
||||||
замены
|
|
||||||
в
|
|
||||||
заданной
|
|
||||||
строке(аналог
|
|
||||||
mb_str_replace).
|
|
||||||
*
|
|
||||||
*
|
|
||||||
|
|
||||||
@param
|
|
||||||
|
|
||||||
|
|
||||||
string $search
|
|
||||||
Строка, которую
|
|
||||||
нужно
|
|
||||||
найти
|
|
||||||
и
|
|
||||||
заменить.
|
|
||||||
* @ param
|
|
||||||
string $replace
|
|
||||||
Строка, на
|
|
||||||
которую
|
|
||||||
нужно
|
|
||||||
заменить
|
|
||||||
найденную
|
|
||||||
строку.
|
|
||||||
* @ param
|
|
||||||
string $subject
|
|
||||||
Строка, в
|
|
||||||
которой
|
|
||||||
нужно
|
|
||||||
выполнить
|
|
||||||
замену.
|
|
||||||
* @ param
|
|
||||||
string $encoding(необязательный)
|
|
||||||
Кодировка(по
|
|
||||||
умолчанию, UTF - 8).
|
|
||||||
*
|
|
||||||
*
|
|
||||||
|
|
||||||
@
|
|
||||||
|
|
||||||
|
|
||||||
return string
|
|
||||||
Возвращает
|
|
||||||
новую
|
|
||||||
строку
|
|
||||||
с
|
|
||||||
выполненной
|
|
||||||
заменой.
|
|
||||||
* /
|
|
||||||
public
|
|
||||||
static
|
|
||||||
function
|
|
||||||
Replace(string $search, string $replace, string $subject,
|
|
||||||
string $encoding = 'UTF-8'): string
|
|
||||||
{
|
|
||||||
// Если
|
|
||||||
кодировка
|
|
||||||
не
|
|
||||||
UTF - 8
|
|
||||||
if ($encoding != 'UTF-8')
|
|
||||||
{
|
|
||||||
// - то
|
|
||||||
перекодируем
|
|
||||||
строку
|
|
||||||
поиска, замены
|
|
||||||
и
|
|
||||||
исходную
|
|
||||||
строку
|
|
||||||
в
|
|
||||||
UTF - 8
|
|
||||||
$search = mb_convert_encoding($search, 'UTF-8', $encoding);
|
|
||||||
// - и
|
|
||||||
перекодируем
|
|
||||||
строку
|
|
||||||
замены
|
|
||||||
в
|
|
||||||
UTF - 8
|
|
||||||
$replace = mb_convert_encoding($replace, 'UTF-8', $encoding);
|
|
||||||
// - и
|
|
||||||
перекодируем
|
|
||||||
исходную
|
|
||||||
строку
|
|
||||||
в
|
|
||||||
UTF - 8
|
|
||||||
$subject = mb_convert_encoding($subject, 'UTF-8', $encoding);
|
|
||||||
}
|
|
||||||
|
|
||||||
// С
|
|
||||||
помощью
|
|
||||||
регулярного
|
|
||||||
выражения
|
|
||||||
заменяем
|
|
||||||
все
|
|
||||||
вхождения
|
|
||||||
строки
|
|
||||||
поиска
|
|
||||||
на
|
|
||||||
строку
|
|
||||||
замены
|
|
||||||
$result = preg_replace('/'.preg_quote($search, '/').'/u', $replace, $subject);
|
|
||||||
|
|
||||||
// Если
|
|
||||||
кодировка
|
|
||||||
не
|
|
||||||
UTF - 8
|
|
||||||
if ($encoding != 'UTF-8')
|
|
||||||
// - то
|
|
||||||
перекодируем
|
|
||||||
результат
|
|
||||||
в
|
|
||||||
исходную
|
|
||||||
кодировку
|
|
||||||
$result = mb_convert_encoding($result, $encoding, 'UTF-8');
|
|
||||||
|
|
||||||
// Возвращаем
|
|
||||||
результат
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user