【问题标题】:PHP converting special characters, like ş to s, ţ to t, ă to aPHP 转换特殊字符,如 ş 到 s,ţ 到 t,ă 到 a
【发布时间】:2012-02-12 21:38:59
【问题描述】:

我不知道如何命名我需要的东西,我想在 PHP 中将字符转换为更“正常”的字符集,例如:

ş to become s
ţ to become t, 
ă to become a

我有罗马尼亚城镇名称,我想在 URL 中使用更多“正常”字符。 我想我想将罗马尼亚字符转换为美国字符(或任何合适的名称)。

【问题讨论】:

标签: php character


【解决方案1】:

你要做的就是所谓的音译。 intl 扩展中有一个 Transliterator(仅限 PHP 5.4):http://www.php.net/manual/en/transliterator.transliterate.php

例子:

$str = 'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ';
$rule = 'NFD; [:Nonspacing Mark:] Remove; NFC';

$myTrans = Transliterator::create($rule); 
echo $myTrans->transliterate($str);

//aaaaaceeeeiiiinooooouuuuyy
//AAAAACEEEEIIIINOOOOOUUUUY

【讨论】:

  • 这可能会很好,但我的 plesk 面板似乎还没有 PHP 5.4 并且缺少类。也许在下一次更新中。
【解决方案2】:

这个怎么样:

$text = str_replace(array("ş","ţ","ă"),array("s","t","a"),$text);

【讨论】:

  • 谢谢,这个方法效果很好。我认为有某种转换功能可以做到这一点。类似normalize_chars("şţă");
【解决方案3】:

正如这里已经告知的那样,您想要做的事情称为音译,但这在您的情况下可能并不总是正常工作 - 您真正想要做的是生成一个“slug”(不要问我为什么它被称为那...)从人工提供的输入中使用,即在网址中。

看看这段代码:http://trac.symfony-project.org/browser/plugins/sfPropelActAsSluggableBehaviorPlugin/lib/sfPropelActAsSluggableBehaviorUtils.class.php,看看如何制作可靠的 url 安全和人类可读的标识符。

【讨论】:

    【解决方案4】:

    我会继续使用 PHP 为我们提供的更复杂的音译系统。关于iconv函数。

    一个例子如下:

    $city = iconv('UTF-8', 'ASCII//TRANSLIT', $city);
    var_dump($city);
    

    【讨论】:

      【解决方案5】:

      你可以使用str_replace

      $text = str_replace( array( 'ş', 'ţ', 'ă' ), array( 's', 't,', 'a' ), $text );
      

      【讨论】:

        【解决方案6】:

        查看strtr,它将特定字符替换为特定替换。

        echo strtr($string, "äåö", "aao");
        

        【讨论】:

        • 这似乎是为了我想要的但它返回了一些奇怪的字符,我用str_replace 来避免尝试调试strtr 方法。谢谢。
        猜你喜欢
        • 2011-07-06
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多