【问题标题】:PHP Normalizer doesn't show different resultPHP Normalizer 没有显示不同的结果
【发布时间】:2013-09-14 12:50:24
【问题描述】:

我想使用normalizer class 来实现类似:

'ö ä ü é ô' => 'o a u e o'

我运行了这个 php 脚本:

header("Content-Type: text/html; charset=UTF-8");
echo Normalizer::normalize('ö ä ü é ô', Normalizer::FORM_C);

结果是:

ö ä ü é ô

所以输入没有区别。我能做什么?

【问题讨论】:

  • 规范化器不是这样做的,您的期望是错误的。关于如何“从字符中删除变音符号”还有很多其他问题,看看这些。
  • 好的,这就是我的期望来自:stackoverflow.com/questions/6284118/…
  • 哇,这只是……错了。

标签: php


【解决方案1】:

确实没有直接的方法可以做到这一点,但是使用 iconv 你可以将字符串的字符集更改为另一个没有这些重音的字符集,如果你使用 //TRANSLIT 它会改为使用最接近的近似值。

您可以在用户贡献的注释中找到几个示例:http://us2.php.net/manual/en/function.iconv.php

E:您也可以使用 Normalizer 类来做到这一点:

<?php
header("Content-Type: text/html; charset=UTF-8");
$text = "ö ü ä";
echo preg_replace('/\pM*/u','',normalizer_normalize( $text, Normalizer::FORM_D));

【讨论】:

    【解决方案2】:

    你应该使用Transliterator而不是Normalizer

    $str = 'ö ä ü é ô';
    echo Transliterator::create('Latin-ASCII')->transliterate($str);
    

    【讨论】:

    • 效果很好。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多