Как удалить диакритические знаки из текста?

Действующее слово быть "должно".

, Если бы необходимо гарантировать futureproofing тогда, можно создать собственный класс даты/времени и использование это, но я только сделал бы это, если Вы думаете, что то, что Вы пишете, будет использоваться на ОС прежней версии

14
задан George Claghorn 22 November 2009 в 23:42
поделиться

7 ответов

// normalize data (remove accent marks) using PHP's *intl* extension
$data = normalizer_normalize($data);

// replace everything NOT in the sets you specified with an underscore
$data = preg_replace("#[^A-Za-z1-9]#","_", $data);
14
ответ дан 1 December 2019 в 05:51
поделиться

Используйте iconv для преобразования строк из заданную кодировку в ASCII, затем замените не буквенно-цифровые символы, используя preg_replace :

$input = 'räksmörgås och köttbullar'; // UTF8 encoded
$input = iconv('UTF-8', 'ASCII//TRANSLIT', $input);
$input = preg_replace('/[^a-zA-Z0-9]/', '_', $input);
echo $input;

Результат:

raksmorgas_och_kottbullar
20
ответ дан 1 December 2019 в 05:51
поделиться

Если вас просто интересует безопасность URL-адресов, вам нужен urlencode .

Возвращает строку, в которой все не буквенно-цифровые символы, кроме -_. были заменены на процент (%) знак, за которым следуют две шестнадцатеричные цифры и пробелы, закодированные знаком плюс (+). Это кодируется так же, как опубликованные данные из формы WWW закодировано так же, как в приложение / x-www-form-urlencoded тип носителя. Это отличается от » Кодировка RFC 1738 (см. Rawurlencode ()) в том, что по историческим причинам пробелы кодируются как знаки плюса (+).

Если вы действительно хотите удалить все символы, отличные от AZ, az, 1-9 (что, кстати, не так с 0 ?), тогда вам нужно:

$mynewstring = preg_replace('/[^A-Za-z1-9]/', '', $str);
4
ответ дан 1 December 2019 в 05:51
поделиться

так же просто, как

 $str = str_replace(array('å', 'ä', 'ö'), array('a', 'a', 'o'), $str); 
 $str = preg_replace('/[^a-z0-9]+/', '_', strtolower($str));

при условии, что вы используете одну и ту же кодировку для ваших данных и кода.

2
ответ дан 1 December 2019 в 05:51
поделиться

Одно простое решение - использовать функцию str_replace для поиска и замены массивов букв.

1
ответ дан 1 December 2019 в 05:51
поделиться

Вам не нужны необычные регулярные выражения для фильтрации шведских символов, просто используйте функцию strtr , чтобы «перевести» их, например:

$your_URL = "www.mäåö.com";
$good_URL = strtr($your_URL, "äåöë etc...", "aaoe etc...");
echo $good_URL;

-> output: www .maao.com :)

0
ответ дан 1 December 2019 в 05:51
поделиться

и весь шведский язык должен быть преобразован следующим образом:

'å' в 'a', 'ä' в 'a' и 'ö' в 'o' (просто удалите точки выше).

Используйте normalizer_normalize () , чтобы избавиться от диакритических знаков .

Остальные должны стать подчеркиваниями, как я сказал.

Используйте preg_replace ( ) с шаблоном [\ W] (iow: любой символ, который не соответствует буквам, цифрам или знаку подчеркивания), чтобы заменить их знаками подчеркивания.

Окончательный результат должен выглядеть так:

$data = preg_replace('[\W]', '_', normalizer_normalize($data));
8
ответ дан 1 December 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: