使用Str_replace在PHP中将Æ转换为“Ae”?

时间:2010-12-20 17:01:17

标签: php utf-8

由于业务逻辑合理的原因,我需要在字符串中将字符“Æ”转换为“Ae”。但是,尽管mb_detect_encoding()告诉我字符串是UTF-8,但我无法弄清楚如何执行此操作。 (并且出于业务逻辑的其他原因,在替换它之前,htmlentities()字符串将成为一个问题,正如其他谷歌搜索建议的那样。)

我首先尝试的是使用测试字符串“Æther”:

return str_replace("Æ", 'Ae', $string); 

不幸的是,实际上并没有在文本中找到Æ,返回“Æther”。

return str_replace(chr(195), 'Ae', $string); 

找到Æ并替换它,但之后添加一个未知字符,将其更改为不可用的“Ae ther”。所以我尝试了这个:

$ae_character = mb_convert_encoding('&#' . intval(195) . ';', 'UTF-8', 'HTML-ENTITIES');
return str_replace($ae_character, 'Ae', $string); 

再次未能在字符串中找到Æ字符。我知道这是某种类型的UTF-8问题,但老实说,如果不事先添加额外的字符就如何搜索和替换它,我真的很难过。有任何想法吗?

2 个答案:

答案 0 :(得分:6)

<?php
$x = 'Æmystr';
print str_replace('Æ', 'AE', $x); // prints: AEmystr
?>

该代码工作得很好,我相信你缺少的是改变文件的编码。您的.php文件应以UTF-8或UNICODE编码。这可以在一些(文本)编辑器或IDE中完成,即Eclipse,EditPlus,Notepad ++等......甚至是Windows 7上的记事本。

保存时调出“保存/另存为”对话框,通常在“保存”按钮附近有一个“编码”下拉/单选按钮,可以在ANSI和UTF-8(以及其他)之间进行选择。

On * nix我相信大多数编辑都有它,只是不确定位置。如果你这样做并让它工作,然后用一个只做ANSI的编辑器编辑/保存,它将用一个未知的char等覆盖它......

至于为什么以下代码不起作用。

return str_replace(chr(195), 'Ae', $string); 

这是因为unicode char通常是2个字符放在一起。所以你上面所说的只是unicode char的开头。试试这个:

print str_replace(chr(195).chr(134), 'AE', $x);

那也应该替换它,甚至可能是首选,因为你(可能)不必更改文件编码。

答案 1 :(得分:0)