PHP多字节字符串连接和比较?

时间:2012-07-05 07:05:54

标签: php encoding utf multibyte non-ascii-characters

Win7-HUN,UTF8 PHP文件。

function Test($Msg){

 $Result = "";
 $ReplFrom = "ő";
 $ReplTo = "ö";

 for($i=0; $i<mb_strlen($Msg); $i++){
 $c = mb_substr($Msg, $i, 1);
 echo($c);echo("<br>");
 }
}

Test('őű');

这显示出良好的效果:“őű”

我想用“ö”替换“ő”,但要逐一替换,因为我想检查很多其他事情。

function Test($Msg){

 $Result = "";
 $ReplFrom = "ő";
 $ReplTo = "ö";

 for($i=0; $i<mb_strlen($Msg); $i++){
 $c = mb_substr($Msg, $i, 1);
 $add = $c;
 $h = mb_substr($ReplFrom, 0, 1);
 if ($c == $h) {
 $add = $ReplTo;
 echo("found");
 }
 $Result = $Result.$add;
 }

 return $Result;

} 

有趣的是找到所有字符,结果是错误的。

简化为concat:

 $what = 'ő';
 $replto = "ö";
 echo($what.$replto); 

这很好。

 $what = mb_substr('ő', 0, 1);
 $replto = mb_substr("ö", 0, 1);
 echo($what.$replto); 

这是错误的。

我做错了什么? 我想介入每个MB角色,并检查它。如果其中一些需要,我必须更换。 如果其中一些是非法的,请用“”替换它们。等等。 并在最后连接到一个字符串。

例如: “álmosőkörben+ 2” “álmosökörben2”

但是我的代码出了点问题。 我想使用UTF8字符,因为我有MultiByte输入,以及UTF8或16 XML。 有些服务器是英语的,有些是匈牙利语(编码不同)。

但有趣的是,当我想使用MB字符时出现问题。 也许连接会导致这个?

非常非常感谢这个主题的每一次进步!

问候:   DD

1 个答案:

答案 0 :(得分:2)

您可能需要为mb_ functions指定编码。

$c = mb_substr($Msg, $i, 1,'utf-8');