3

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

Flat -  ♭
Sharp - ♯

正是这些数据的传递让我感到困惑。

让我们把和弦符号 B flat: B♭<br /> 它用 HTML 实体表示是:B&#9837;

客户端
要传递它,我对其进行 url 编码: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 实体?

4

2 回答 2

2

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

B%26%239837%3B是 的 URL 编码版本B&#9837;B&#9837;是“B♭”的 HTML 实体表示,它不是“UTF-8”。你想要的是B%E2%99%AD,它是“B♭”的 URL 编码的 UTF-8 表示。如果你这样做$_GET['lookup']会得到 UTF-8 编码的字符串“B♭”。

您应该将所有内容从前到后保存在 UTF-8 中。请参阅在 Web 应用程序中从头到尾处理 Unicode,以及每个程序员绝对、肯定需要了解的关于使用文本的编码和字符集的详细信息。

于 2013-04-27T14:39:48.530 回答
0

尝试这个:

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


//filename.php
echo html_entity_decode(urldecode($_GET['bSharp']));
于 2013-04-27T14:47:59.367 回答