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

Fer*_*etz 4 php utf-8

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

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

return str_replace("Æ", 'Ae', $string); 
Run Code Online (Sandbox Code Playgroud)

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

return str_replace(chr(195), 'Ae', $string); 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Vip*_*_Sb 6

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

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

保存时会显示"保存/另存为"对话框,并且通常在"保存"按钮附近有一个"编码"下拉/单选按钮,可让您在ANSI和UTF-8(以及其他)之间进行选择.

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

至于为什么下面的代码不起作用.

return str_replace(chr(195), 'Ae', $string); 
Run Code Online (Sandbox Code Playgroud)

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

print str_replace(chr(195).chr(134), 'AE', $x);
Run Code Online (Sandbox Code Playgroud)

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