заменить — Как удалить все многобайтовые символы в PHP?

Я хочу отфильтровать мою переменную и удалить все многобайтовые символы, кроме некоторых из них (список персидских символов, которые у меня есть).
Как я мог сделать это в PHP?
Редактировать № 1:
Вот мой строковый код:

// variable
$str = ' سلامoff3 ';

// array of persian characters
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ',
'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ',
'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',];

Я хочу заменить все многобайтовые символы, кроме персидских символов (есть персидские символы и один многобайтовый скрытый символ после цифры 3).
Редактировать № 2:
Скрытый символ не виден, но в phpStorm он виден. Я думаю, что StackOverFlow фильтрует недопустимые символы (что я хочу сделать).

-1

Решение

Прямой способ сделать это будет использовать mb_string:

$str = ' سلامoff3 '; // variable
$to = ['ا', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'ء',]; //
$cleaned = "";
for ($i = 0;$i <mb_strlen($str);$i++) {
$char = mb_substr($str,$i,1);
if (mb_strlen($char) == strlen($char) || in_array($char,$to)) {
$cleaned .= $char;
}
}
print_r($cleaned);

Идея состоит в том, чтобы просмотреть каждый символ (с помощью функций mb для получения реальных символов) и проверить, находится ли он в отдельном байте или в списке разрешенных, прежде чем добавлять его в новую строку.

Обратите внимание, что это решение требует mb_string

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]