当前位置:  开发笔记 > 编程语言 > 正文

如何从文本中删除变音符号?

如何解决《如何从文本中删除变音符号?》经验,为你挑选了4个好方法。

我正在建立瑞典语网站,瑞典语字母是å,ä和ö.

我需要创建一个由用户输入的字符串,以使用PHP成为url-safe.

基本上,需要将所有字符转换为下划线,所有这些除外:

 A-Z, a-z, 1-9

所有瑞典人应该像这样转换:

'å'到'a'和'ä'到'a'和'ö'到'o'(只需删除上面的点).

正如我所说,其余的应该成为下划线.

我不擅长正则表达式,所以我很感激帮助人!

谢谢

注意:不是URLENCODE ...我需要将它存储在数据库等等,urlencode不适合我.



1> user1518659..:

这应该是有用的,几乎可以处理所有情况.

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'));
}



2> Pär Wiesland..:

使用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



3> Jeremy L..:
// 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);


请注意,`normalizer_normalize()`是_intl_ PHP扩展的一部分,并不总是活动的.此扩展已添加到PHP 5.3的核心,但在大多数Linux发行版中,默认情况下它不处于活动状态.例如,在Debian中,它位于单独的包_php5-intl_中.如果无法安装/激活它,请尝试_ext/iconv_.代替

4> BalusC..:

所有瑞典人应该像这样转换:

'å'到'a'和'ä'到'a'和'ö'到'o'(只需删除上面的点).

用于normalizer_normalize()摆脱变音符号.

正如我所说,其余的应该成为下划线.

使用preg_replace()带有图案[\W](督察:它不匹配字母,数字或下划线的任何字符)用下划线来替换它们.

最终结果应如下所示:

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

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有