【发布时间】:2012-02-12 21:38:59
【问题描述】:
我不知道如何命名我需要的东西,我想在 PHP 中将字符转换为更“正常”的字符集,例如:
ş to become s
ţ to become t,
ă to become a
我有罗马尼亚城镇名称,我想在 URL 中使用更多“正常”字符。 我想我想将罗马尼亚字符转换为美国字符(或任何合适的名称)。
【问题讨论】:
我不知道如何命名我需要的东西,我想在 PHP 中将字符转换为更“正常”的字符集,例如:
ş to become s
ţ to become t,
ă to become a
我有罗马尼亚城镇名称,我想在 URL 中使用更多“正常”字符。 我想我想将罗马尼亚字符转换为美国字符(或任何合适的名称)。
【问题讨论】:
你要做的就是所谓的音译。 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
【讨论】:
这个怎么样:
$text = str_replace(array("ş","ţ","ă"),array("s","t","a"),$text);
【讨论】:
normalize_chars("şţă");
正如这里已经告知的那样,您想要做的事情称为音译,但这在您的情况下可能并不总是正常工作 - 您真正想要做的是生成一个“slug”(不要问我为什么它被称为那...)从人工提供的输入中使用,即在网址中。
看看这段代码:http://trac.symfony-project.org/browser/plugins/sfPropelActAsSluggableBehaviorPlugin/lib/sfPropelActAsSluggableBehaviorUtils.class.php,看看如何制作可靠的 url 安全和人类可读的标识符。
【讨论】:
我会继续使用 PHP 为我们提供的更复杂的音译系统。关于iconv函数。
一个例子如下:
$city = iconv('UTF-8', 'ASCII//TRANSLIT', $city);
var_dump($city);
【讨论】:
你可以使用str_replace。
$text = str_replace( array( 'ş', 'ţ', 'ă' ), array( 's', 't,', 'a' ), $text );
【讨论】:
查看strtr,它将特定字符替换为特定替换。
echo strtr($string, "äåö", "aao");
【讨论】:
str_replace 来避免尝试调试strtr 方法。谢谢。