转换Æ;至;Ae“;在PHP中使用Str_替换?

转换Æ;至;Ae“;在PHP中使用Str_替换?,php,utf-8,Php,Utf 8,出于业务逻辑的原因,我需要将字符串中的字符“Æ”转换为“Ae”。然而,尽管mb_detect_encoding()告诉我字符串是UTF-8,但我不知道如何执行此操作。(出于业务逻辑的其他原因,在替换字符串之前,htmlentities()将是一个问题,正如其他谷歌搜索所建议的那样。) 我首先尝试的是使用测试字符串“Æther”: 不幸的是,这并没有在文本中找到Æ,返回“Æther” 找到并替换Æ,但随后添加未知字符,将其更改为不可用的“Ae”�所以我试了一下: $ae_character = m

出于业务逻辑的原因,我需要将字符串中的字符“Æ”转换为“Ae”。然而,尽管mb_detect_encoding()告诉我字符串是UTF-8,但我不知道如何执行此操作。(出于业务逻辑的其他原因,在替换字符串之前,htmlentities()将是一个问题,正如其他谷歌搜索所建议的那样。)

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

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

找到并替换Æ,但随后添加未知字符,将其更改为不可用的“Ae”�所以我试了一下:

$ae_character = mb_convert_encoding('&#' . intval(195) . ';', 'UTF-8', 'HTML-ENTITIES');
return str_replace($ae_character, 'Ae', $string); 
再次未能在字符串中找到Æ字符。我知道这是某种UTF-8问题,但我真的很困惑,如何在不添加额外字符的情况下搜索并替换它。有什么想法吗

<?php
$x = 'Æmystr';
print str_replace('Æ', 'AE', $x); // prints: AEmystr
?>
这是因为一个unicode字符通常是两个字符放在一起。因此,上面的内容只是unicode字符的开始。试试这个:

print str_replace(chr(195).chr(134), 'AE', $x);
这也应该取代它,甚至可能是首选,因为您(可能不需要)不必更改文件编码。


听起来您需要mb_字符串功能。好了,PHP还没有准备好UTF8。你确定你的
$string
是UTF-8吗?也许这是一种不同的编码方式,
mb\u detect\u编码
给出了错误的结果。非常好-之后添加chr(134)确实有效,我不必担心编辑的编码问题!现在,如果不太麻烦的话,还有一个后续问题:UTF-8中的每个chr()后面是否也会跟一个chr(134),或者这只是Ae的本地值?如果没有,那么你知道我在哪里可以找到清单吗?
<?php
$x = 'Æmystr';
print str_replace('Æ', 'AE', $x); // prints: AEmystr
?>
return str_replace(chr(195), 'Ae', $string); 
print str_replace(chr(195).chr(134), 'AE', $x);