14 php regex diacritics preg-replace
我正在建立瑞典语网站,瑞典语字母是å,ä和ö.
我需要创建一个由用户输入的字符串,以使用PHP成为url-safe.
基本上,需要将所有字符转换为下划线,所有这些除外:
A-Z, a-z, 1-9
Run Code Online (Sandbox Code Playgroud)
所有瑞典人应该像这样转换:
'å'到'a'和'ä'到'a'和'ö'到'o'(只需删除上面的点).
正如我所说,其余的应该成为下划线.
我不擅长正则表达式,所以我很感激帮助人!
谢谢
注意:不是URLENCODE ...我需要将它存储在数据库等等,urlencode不适合我.
use*_*659 22
这应该是有用的,几乎可以处理所有情况.
function Unaccent($string)
{
return preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($string, ENT_COMPAT, 'UTF-8'));
}
Run Code Online (Sandbox Code Playgroud)
Pär*_*der 20
使用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;
Run Code Online (Sandbox Code Playgroud)
结果:
raksmorgas_och_kottbullar
Run Code Online (Sandbox Code Playgroud)
Jer*_*y L 14
// 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);
Run Code Online (Sandbox Code Playgroud)
所有瑞典人应该像这样转换:
'å'到'a'和'ä'到'a'和'ö'到'o'(只需删除上面的点).
用于normalizer_normalize()
摆脱变音符号.
正如我所说,其余的应该成为下划线.
使用preg_replace()
带有图案[\W]
(督察:它不匹配字母,数字或下划线的任何字符)用下划线来替换它们.
最终结果应如下所示:
$data = preg_replace('[\W]', '_', normalizer_normalize($data));
Run Code Online (Sandbox Code Playgroud)
如果启用了 intl php 扩展,您可以像这样使用 Transliterator:
protected function removeDiacritics($string)
{
$transliterator = \Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC;');
return $transliterator->transliterate($string);
}
Run Code Online (Sandbox Code Playgroud)
删除其他特殊字符(不是像“æ”这样的变音符号)
protected function removeDiacritics($string)
{
$transliterator = \Transliterator::createFromRules(
':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;',
\Transliterator::FORWARD
);
return $transliterator->transliterate($string);
}
Run Code Online (Sandbox Code Playgroud)