首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用strtr转换特殊字符的故障

使用strtr转换特殊字符的故障
EN

Stack Overflow用户
提问于 2014-03-31 09:17:50
回答 1查看 598关注 0票数 2
代码语言:javascript
复制
$string = strtr($string,
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ", 
"aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr");

因此,下面的代码行将特殊字符转换为普通字符。然而,它并没有像它应该的那样返回我的角色。

例如:

代码语言:javascript
复制
Thïs is á tëst

返回:

代码语言:javascript
复制
thrs-is-r-trst

似乎每一个特殊的字符都会作为列表中的最后一个字母返回。

完整的代码片段:

代码语言:javascript
复制
$string = strtr($_POST['title'], 
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ", 
"aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr");

$string = trim($string);

$string = str_replace (" ", "-", $string);

$string = preg_replace('/[^a-zA-Z0-9-]/', '', $string);

$string = strtolower($string);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 09:25:02

来自TFM

如果给定三个参数,则此函数将返回str的副本,其中from中每个(单字节)字符的所有出现都已转换为to中的相应字符,也就是说,$from[$n]的每次出现都被$to[$n]替换,其中$n是两个参数中的有效偏移量。

strtr将输入字符串视为单字节字符。但是,您几乎可以肯定地将它们编码为多字节字符,因此它们没有被正确地解析。您应该使用strtr的第二种形式:

如果给出两个参数,第二个参数应该是一个array('from' => 'to', ...)形式的数组。返回值是一个字符串,其中所有数组键的出现都被相应的值替换。最长的钥匙先试一试。一旦一个子字符串被替换,它的新值将不再被搜索。

代码语言:javascript
复制
$string = strtr($_POST['title'], array('À' => 'a', 'Á' => 'a', ...));

这应该正确地处理多字节字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22757813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档