Php str_replace для датских символов

Я удаляю датские специальные символы из строки, у меня есть строка, подобная этой. 1554896020A2х.pdf датские символы - это "æ ø å" для удаления датских символов. Я использую str_replace, я успешно удаляю эти два символа "æ ø", но я не знаю этот "å" не удаляется из строки. Заранее благодарны за Вашу помощь.

Я использовал это, чтобы удалить датский char

$patterns = array('å', 'æ', 'ø');
$replacements = array('/x7D', 'X', '/x7C');
echo str_replace($patterns, $replacements, 1554896020A2å.pdf);

Он выглядит как двухбайтовый символ: a плюс диакритический знак. Попробуйте добавить "a\u{030A}" в список $patterns. См. 3v4l.org/A994q

Wiktor Stribiżew 10.04.2019 13:53

так что я могу сделать, у вас есть идеи?

Salman Iqbal 10.04.2019 13:54

См. 3v4l.org/A994q. Или $patterns = array('å', "a\xCC\x8A", 'æ', 'ø'); тоже справится.

Wiktor Stribiżew 10.04.2019 13:55

спасибо, да, теперь это работает, у меня также есть заглавная буква "Å", что я могу использовать для этого

Salman Iqbal 10.04.2019 13:57

Я добавил ответ. Не стесняйтесь приспосабливаться.

Wiktor Stribiżew 10.04.2019 14:00

Большое спасибо

Salman Iqbal 10.04.2019 14:01

Не уверен, что вам нужно регулярное выражение, но /a\p{M}+/ui будет сопоставлять все такие a с диакритическими знаками. См. 3v4l.org/Ni4dc

Wiktor Stribiżew 10.04.2019 14:02

У меня есть только датский char, поэтому я использую только str_replace

Salman Iqbal 10.04.2019 14:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 для поиска без учета регистра, удалите, если не нужно.

спасибо за ваш ответ, я не знаю, почему это не работает, все работает, но для этого Å это работает в сафари, у вас есть идеи?

Salman Iqbal 10.04.2019 19:14

@SalmanIqbal Если это широкий символ (начиная с кодовой точки Unicode), добавьте его как есть. Я добавил его в решение выше.

Wiktor Stribiżew 10.04.2019 19:16

это дает мне эту ошибку. preg_replace(): Неизвестный модификатор 'a'

Salman Iqbal 10.04.2019 19:24

Почему preg_replace? Мой пример кода основан на str_replace. Поделитесь кодом через 3v4l.org

Wiktor Stribiżew 10.04.2019 19:25

это не работает, я использовал "/A\p{M}+/ui" с str_replace.

Salman Iqbal 10.04.2019 19:28
/A\p{M}+/ui — это регулярное выражение, его нужно использовать с preg_replace. Поделитесь кодом. Скажи мне, что ты пытаешься сделать.
Wiktor Stribiżew 10.04.2019 19:28

Поделитесь ссылкой.

Wiktor Stribiżew 10.04.2019 19:30

Другие вопросы по теме