【发布时间】:2012-04-07 12:48:21
【问题描述】:
我有一个如下所示的网址(注意“„ 符号):
http://tinklarastis.omnitel.lt/kokius-aptarnavimo-kanalus-klientui-siulo-„omnitel“-1494
我从 SimplePie 解析器收到它,如果这很重要的话。现在,如果您尝试在浏览器中访问此特定 URL 并从地址栏中复制它,您将获得一个包含非 ASCII 符号的 URL percent encoded:
http://tinklarastis.omnitel.lt/kokius-aptarnavimo-kanalus-klientui-siulo-%E2%80%9Eomnitel%E2%80%9C-1494
我试图了解如何在 PHP 中模拟相同的转换。我不能简单地使用urlencode() 或urlrawencode(),因为它们同时编码了非ASCII 符号和 保留符号,而在我的情况下,保留符号(/?& 等)应该保持原样。
到目前为止,我只看到solutions 涉及将 URL 拆分为保留符号之间的片段,然后使用 urlencode(),但这对我来说感觉很骇人听闻,我希望有一个更优雅的解决方案。我尝试了iconv()、mb_convert_encoding() 的各种变体,但都没有成功。
【问题讨论】:
-
您链接到的解决方案中有什么“骇人听闻”的地方?您正在寻找的琐碎字符串操作的“优雅”方式是什么?
-
@YourCommonSense 我可能错了,但对我来说,我的情况似乎不是任意字符串操作练习。相反,它是一个相当通用的编码任务——浏览器在从地址栏复制 URL 时这样做表明它背后应该有一些标准/含义。
-
是的,这是通用编码任务。这本身就是微不足道的字符串操作。而且您已经有了解决方案。如果您已经找到答案,我认为发布另一个问题毫无意义。
-
我正在寻找一种明确的方法来解决这个任务。为了转义 HTML,可以使用 htmlspecialchars() 或者只使用字符代码和 str_replace() 编写自定义函数。你是对的,我知道自定义方式,但我正在寻找一种使用内置字符串操作函数的解决方案(无论它们多么微不足道)。