mb_strtolower不工作

时间:2017-03-30 19:35:03

标签: php regex string preg-replace

我有以下字符串:

$var = "RUA TANGARA"

我正在做:

echo mb_strtolower(preg_replace('/[^~\'"]/', null, iconv('UTF-8', 'ASCII//TRANSLIT', $var)), 'UTF-8');

但这仍然是"RUA TANGARA"

我使用preg_replace(),因为$var可以是"RÜÁ TÃNAGARA"

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

PHP的功能非常好用,看看这个简单的演示:

<?php
$data = "RUA TANGARA";
$result = mb_strtolower($data);
var_dump($result);

明显的输出是:

  

string(11)“rua tangara”

与非ascii字符相同:

<?php
$data = 'RÜÁ TÃNAGARA';
$result = mb_strtolower($data);
var_dump($result);

输出是:

  

string(15)“rüátãnagara”

答案 1 :(得分:1)

问题是您希望在音译后替换某些字符,但是您在字符类^的开头指定了[](具有特殊含义并且表示NOT)。

所以你要替换非~'"的字符(在你的例子中恰好是所有字符),所以它会产生一个空字符串。要解决问题,只需转义^,将其从开头移开或删除它,如果不需要它应该没问题:

/[\^~\'"]/

或者:

/[~^\'"]/  

Working Example

答案 2 :(得分:-1)

尝试

$newStr = strtolower($var);

echo $newStr;