Я удаляю датские специальные символы из строки, у меня есть строка, подобная этой. 1554896020A2х.pdf датские символы - это "æ ø å" для удаления датских символов. Я использую str_replace, я успешно удаляю эти два символа "æ ø", но я не знаю этот "å" не удаляется из строки. Заранее благодарны за Вашу помощь.
Я использовал это, чтобы удалить датский char
$patterns = array('å', 'æ', 'ø');
$replacements = array('/x7D', 'X', '/x7C');
echo str_replace($patterns, $replacements, 1554896020A2å.pdf);
так что я могу сделать, у вас есть идеи?
См. 3v4l.org/A994q. Или $patterns = array('å', "a\xCC\x8A", 'æ', 'ø'); тоже справится.
спасибо, да, теперь это работает, у меня также есть заглавная буква "Å", что я могу использовать для этого
Я добавил ответ. Не стесняйтесь приспосабливаться.
Большое спасибо
Не уверен, что вам нужно регулярное выражение, но /a\p{M}+/ui будет сопоставлять все такие a с диакритическими знаками. См. 3v4l.org/Ni4dc
У меня есть только датский char, поэтому я использую только str_replace






a, который у вас есть в строке, не является отдельной кодовой единицей, это кодовая точка, состоящая из двух кодовых единиц, \xCC и \x8A.
Таким образом, вы можете добавить это значение к своим шаблонам/заменам:
$patterns = array('å', "a\xCC\x8A", "A\xCC\x8A", 'Å', 'æ', 'ø');
$replacements = array('/x7D', '/x7D', '/x7D', '/x7D', 'X', '/x7C');
echo str_replace($patterns, $replacements, '1554896020A2å.pdf');
// => 1554896020A2/x7D.pdf
См. демонстрация PHP
В PHP 7 вы можете использовать "a\u{030A}" / "A\u{030A}", чтобы сопоставить эти a буквы с их диакритическим символом.
Обратите внимание, что вы можете использовать шаблон регулярного выражения /a\p{M}+/ui с preg_replace, если вы решите использовать регулярное выражение и сопоставить любые a, за которыми следуют диакритические знаки. i для поиска без учета регистра, удалите, если не нужно.
спасибо за ваш ответ, я не знаю, почему это не работает, все работает, но для этого Å это работает в сафари, у вас есть идеи?
@SalmanIqbal Если это широкий символ (начиная с кодовой точки Unicode), добавьте его как есть. Я добавил его в решение выше.
это дает мне эту ошибку. preg_replace(): Неизвестный модификатор 'a'
Почему preg_replace? Мой пример кода основан на str_replace. Поделитесь кодом через 3v4l.org
это не работает, я использовал "/A\p{M}+/ui" с str_replace.
/A\p{M}+/ui — это регулярное выражение, его нужно использовать с preg_replace. Поделитесь кодом. Скажи мне, что ты пытаешься сделать.
Поделитесь ссылкой.
Он выглядит как двухбайтовый символ:
aплюс диакритический знак. Попробуйте добавить"a\u{030A}"в список$patterns. См. 3v4l.org/A994q