在php中正确显示♥

时间:2014-03-28 22:35:20

标签: php html json simplexml

我使用php动态显示页面。但是,它在某些字符上无法正确显示,例如♥。我使用SimpleXML获取JSON字符串。当我执行echo $string时,它会返回âÂÂ¥。然后,我尝试使用utf8_decode($string),我得到â¥,这仍然是错误的。如何正确操作此字符串,以便在我写时显示echo $string

2 个答案:

答案 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直到问题发生变化。