Intereting Posts
как получить значение из массива в массиве в массиве? Сайт Joomla на сервере LAMP за прокси-сервером не может получить доступ к потоку ресурсов HTTP Проблема подключения к базе данных sqlite с использованием php Сравните текущую дату с меткой времени в WordPress с помощью meta_query PHP SimpleXML asXML пишет ANSI-кодированный файл Как избежать того, что пользователь удаляет сеанс Заполнение результатов запроса пустыми строками Как разрешить путь в классе non-контроллера в symfony2 Вытяните столбцы из производной таблицы и суммируйте их в одном выражении SELECT MySQL Улучшение эффективности скребка HTML с помощью pcntl_fork () Метод тестирования phpunit, который вызывает другие методы класса, которые требуют макета Метод класса PHP с именем print … не разрешен? Существует ли спецификация для «нетрадиционного» режима jQuery.param ()? Как продемонстрировать эксплойт extract ($ _ POST)? PHP. Проверка наличия или отсутствия индекса массива.

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

Я делаю шведский сайт, а шведские буквы – å, ä и ö.

Мне нужно сделать строку, введенную пользователем, чтобы стать надежной с PHP.

В принципе, нужно преобразовать все символы в подчеркивание, все EXCEPT:

AZ, az, 1-9 

и все шведские должны быть преобразованы так:

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

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

Я не очень хорош в регулярных выражениях, поэтому я был бы признателен за помощь ребятам!

благодаря

ПРИМЕЧАНИЕ: NOT URLENCODE … Мне нужно сохранить его в базе данных … и т. Д., Urlencode не будет работать для меня.

 // 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); 

Используйте 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 

Это должно быть полезно, если обрабатывать почти все случаи.

 function Unaccent($string) { return preg_replace('~&([az]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($string, ENT_COMPAT, 'UTF-8')); } 

и все шведские должны быть преобразованы так:

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

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

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

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

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

 $data = preg_replace('[\W]', '_', normalizer_normalize($data)); 

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

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

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

 $mynewstring = preg_replace('/[^A-Za-z1-9]/', '', $str); 

так просто как

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

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

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

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

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

-> вывод: http://www.maao.com 🙂

Если расширение intl php включено, вы можете использовать Transliterator следующим образом:

 protected function removeDiacritics($string) { $transliterator = \Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC;'); return $transliterator->transliterate($string); } 

Чтобы удалить другие специальные символы (а не диакритические знаки, только как «æ»)

 protected function removeDiacritics($string) { $transliterator = \Transliterator::createFromRules( ':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', \Transliterator::FORWARD ); return $transliterator->transliterate($string); }