【问题标题】:How to convert special characters to normal characters?如何将特殊字符转换为普通字符?
【发布时间】:2012-04-01 00:23:19
【问题描述】:

我正在尝试转换如下字符:

ë, ä, ï, ö, etc.

普通字符,如:

e, a, i, o, etc.

最好的方法是什么? 我尝试了很多东西,比如 preg_replace 和 str_replace。

谁能帮帮我?

-- 编辑--

我尝试的是:

$ts = array("[À-Å]","Æ","Ç","[È-Ë]","/[Ì-Ï]/","/Ð/","/Ñ/","/[Ò-ÖØ]/","/×/","/[Ù-Ü]/","/[Ý-ß]/","/[à-å]/","/æ/","/ç/","/[è-ë]/","/[ì-ï]/","/ð/","/ñ/","/[ò-öø]/","/÷/","/[ù-ü]/","/[ý-ÿ]/");

$tn = array("A","AE","C","E","I","D","N","O","X","U","Y","a","ae","c","e","i","d","n","o","x","u","y");

$title = preg_replace($ts, $tn, $text);

【问题讨论】:

  • PHP Transliteration的可能重复
  • 这里的正确术语是重音字符。特殊字符是 $#@/\ 等。

标签: php preg-replace special-characters


【解决方案1】:

试试这个 .. 对我有用。

iconv('utf-8', 'ascii//TRANSLIT', $text);

【讨论】:

  • utf8 和 utf-8 对我不起作用。字符被问号替换,仅此而已。
  • @CREE7EN 尝试先设置区域设置:setlocale(LC_CTYPE, 'en_US.UTF8'); 之后编码似乎更好。
  • 我有两个字符串相同的相同单词 strcmp 返回值大于 0 在我使用 iconv 解决方案后 strcmp 返回 0 彼此相等
【解决方案2】:

我喜欢斯图斯的回答,但为了完整起见,这对我有用。

preg_replace("/&([a-z])[a-z]+;/i", "$1", htmlentities($foo));

【讨论】:

  • 这在 IMO 上会更好,因为它不依赖于服务器的语言环境。我遇到了一些问题,iconv('utf-8', 'ascii//TRANSLIT', $text); 在本地可以正常工作,但是一旦推送结果就不同了,可能是因为服务器区域设置不同。
【解决方案3】:

例如,它是从内容标题创建一个简单易读的 URL:

function cleanurl($title) {
        return urlencode(strtolower(str_replace(" ","-",preg_replace("/&([a-z])[a-z]+;/i", "$1", htmlentities($title)))));
}

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2014-08-17
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多