我需要能够在查询字符串中传递音乐尖锐和扁平符号,并且还能在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实体?
答案 0 :(得分:2)
如果您使用实际的UTF-8编码字符而不是HTML实体,那么这将更直接。
B%26%239837%3B
是B♭
的网址编码版本。 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 App和What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text。
答案 1 :(得分:0)
试试这个:
$bSharp = "♯";
echo "<a href='filename.php?bSharp=".urlencode(htmlentities($bSharp))."'>pass it</a>";
//filename.php
echo html_entity_decode(urldecode($_GET['bSharp']));