【问题标题】:UTF-8 characters in friendly URLs友好 URL 中的 UTF-8 字符
【发布时间】:2011-03-18 12:10:18
【问题描述】:

我在 modx 革命 php 框架中创建了一个网站,最近我在 apache 中添加了 Friendly Url 功能。

由于该网站是希腊语,我想在 url 中包含希腊字符,这对友好的 url 来说是一种有效的方法吗?还是会在未来引起问题?

edit:来自日本维基百科的示例链接 ディートリヒ・ブクステフーデ

【问题讨论】:

标签: php apache modx-revolution


【解决方案1】:

RFC 1738 文档的第 2.2 节指出:

因此,只有字母数字,特殊的 字符“$-_.+!*'()”和
用于他们的保留字符 可以使用保留用途
在 URL 中未编码。

您可以对 URL 中的其他字符进行编码,某些浏览器(例如 Chrome)通常会在地址栏中对它们进行解码。

但是,为确保 URL 在所有浏览器上都可读,您应该避免在 URL 中完全使用希腊字符 - 如果可能,请使用 US-ASCII 等效字符。

【讨论】:

    【解决方案2】:

    这不是一个好主意。 urlencode 非 ASCII 字符(但这对 url 不太友好)或将它们转换为对应的 ASCII 字符。

    $url = $server . $path . '/' . urlencode($greektext);
    

    -

    $arr1 = array('Α', 'α', 'Β', 'β', ...);
    $arr2 = array('A', 'a', 'B', 'b', ...);
    $url = $server . $path . '/' . str_replace($arr1, $arr2, $subject);
    

    【讨论】:

    • 因为据我所知,http url 应该只包含 ASCII 字符。 "如果八位字节在 US-ASCII 编码字符集中没有相应的图形字符,如果相应字符的使用不安全,或者如果相应字符在特定 URL 方案中保留用于其他解释,则必须对其进行编码." [1]
    • @Czechnology 重音域存在,现代浏览器可以出色地处理重音字符。
    • @fabrik,好点子。我知道它不久前被允许..但我认为这不是一个好主意,因为用户可能没有正确的键盘(例如在国外时)。但你是对的,这取决于网站管理员。我选择将我的网址转换为 ASCII,以便每个人都可以输入它们。
    • @Dave Everitt,哎呀,这是一个新的巴比伦!此外,如您的链接中所述(在域上使用时),这是一种危险且不安全的方法。
    • @Gumbo,“URL 友好”是指“易于记忆和输入”。当很多 %NN 进来时,我不会再称它为 url-friendly。当我无法输入非 ASCII 字符(例如,我没有可用的正确键盘布局)时,它们也是如此。
    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2014-09-04
    • 2015-04-05
    • 1970-01-01
    • 2017-02-14
    • 2014-04-16
    • 2012-09-27
    相关资源
    最近更新 更多