我使用php动态显示页面。但是,它在某些字符上无法正确显示,例如♥。我使用SimpleXML获取JSON字符串。当我执行echo $string
时,它会返回âÂÂ¥
。然后,我尝试使用utf8_decode($string)
,我得到â¥
,这仍然是错误的。如何正确操作此字符串,以便在我写♥
时显示echo $string
?
答案 0 :(得分:3)
尝试将其放在PHP文件的<head>
中:
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
对于HTML5(感谢scootergrisen),您还可以使用:
<meta charset="utf-8">
修改强>:
好吧,对我来说,您的API似乎编码不正确。这将使任何解码你的字符串的尝试失败(让你自己解析&#39;♥&#39;你自己)。
您的API将♥编码为\u00c3\u00a2\u00c2\u0099\u00c2\u00a5
,根据this似乎无效。
因此,我现在看到的唯一(hackish)解决方案是自己重新解析API的响应,例如this。
编辑2 :
无论您的API在做什么,都不依赖它。您已经拥有XML中所需的所有数据(采用未转义的UTF-8格式),为什么不直接访问它? :)
这可能是最好的做法,没有任何hackish修复:
$name = $steamdata->steamID;
答案 1 :(得分:0)
首先确保保存文件并使用相同的编码将文件显示到浏览器。
例如,将您的PHP文件保存在UTF-8
中,并在<meta charset="utf-8">
部分中添加HTML5文件<head>
。
<!DOCTYPE html>
<head>
<meta charset="utf-8">
</head>
如果它仍然不起作用,可能是因为你使用了一些不理解multibyte
并认为8 bytes = 1 character
的PHP函数。
有一些替代功能。
例如,如果在PHP安装期间安装多字节extionsion,则为mb_substr()
而不是substr()
。
但是对于某些功能,没有替代品,但你可以尝试自己制作一个。
我遇到了ucfirst()
的问题,因为没有mb_ucfirst()
。
所以,而不是这给了我同样的问题:
function mb_ucfirst($tekst){
return utf8_encode(ucfirst(utf8_decode($tekst)));
}
我用这个:
function my_mb_ucfirst($str){
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc . mb_substr($str, 1);
}
也许这可以帮到你。 尝试查看操作字符串的代码并逐个禁用linies直到问题发生变化。