mb_strtolower 不工作

mb_strtolower not working

我有以下字符串:

$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".

有人可以帮助我吗?

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"

尝试

$newStr = strtolower($var);

echo $newStr;

问题是你想在音译后替换某些字符,但你在字符class []的开头指定了^(具有特殊含义,表示NOT) ].

所以您要替换的字符不是 ~'"(在您的示例中恰好是所有这些字符),因此它会产生一个空字符串。要修复,只需转义 ^,将其从开头移开或在不需要时将其删除,应该没问题:

/[\^~\'"]/

或者:

/[~^\'"]/  

Working Example