从Query String PHP读取和写入UTF-8

时间:2013-04-27 14:12:24

标签: php utf-8

我需要能够在查询字符串中传递音乐尖锐和扁平符号,并且还能在utf-8浏览器中显示。通过使用尖锐和扁平符号的html实体表示,显示部分是直截了当的。

Flat -  ♭
Sharp - ♯

传说这些数据让我感到难过。

让我们把和弦符号B取平:B♭
它与HTML实体的表示是:B♭

客户端
要通过它,我会对其进行编码:B%26%239837%3B
然后我在查询字符串中输入:?lookup=B%26%239837%3B

服务器
阅读:$r = urldecode($_GET['lookup']);
显示它:echo $r; 刚刚得到B

然后我尝试了:

阅读:$r = $_GET['lookup'];
显示它:echo $r; 刚刚得到B

原始请求也只显示B。

如何在查询字符串中正确传递这种类型的url编码的html实体?

2 个答案:

答案 0 :(得分:2)

如果您使用实际的UTF-8编码字符而不是HTML实体,那么这将更直接。

B%26%239837%3BB♭的网址编码版本。 B♭是“B♭”的HTML实体表示,它是不是“UTF-8”。你想要的是B%E2%99%AD,它是“B♭”的URL编码的UTF-8表示。如果您在上执行$_GET['lookup'] ,则会获得UTF-8编码的字符串“B♭”。

你应该将所有东西都保持在UTF-8的前后。有关详细信息,请参阅Handling Unicode Front To Back In A Web AppWhat Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

答案 1 :(得分:0)

试试这个:

$bSharp = "&#9839";
echo "<a href='filename.php?bSharp=".urlencode(htmlentities($bSharp))."'>pass it</a>";


//filename.php
echo html_entity_decode(urldecode($_GET['bSharp']));