0

我应该如何格式化带有特殊/国际字符的 URL?

目前,我尝试使 URL “看起来不错”,以便:

www.myhost.com/this is a test, do you know how?

转换为:

www.myhost.com/this_is_a_test_do_you_know_how

我知道可以转换一些国际字母(ü = ue,æ = ae,å = aa),可以删除一些字符。我一般会尝试使 URL 看起来“不错”,但这很愚蠢吗?

但是,与我们的西方 ASCII 格式无关的中文、日文、阿拉伯字母怎么办?

我真的不喜欢用十六进制代码重写 URL 的想法,所以现在如果 url 包含太多“不可转换”字符,我只使用我的内部唯一 ID。

4

4 回答 4

1

您使用什么语言?PHP 包含一个函数 filter_var() ,它似乎可以满足您的大部分需求。请参阅http://us.php.net/manual/en/function.filter-var.php

一般来说,从任意字符串输入生成人类可读的 ASCII 字符串的成本可能太高了,不值得。如果用户给你一个汉字,你会怎么做?查字典并用拼音输出结果?

最好、最通用的解决方案是简单地获取输入,将其格式化为 UTF-8,然后对结果进行 url 编码。这将使非拉丁文本不可读,但无论如何,这些语言都没有好的通用解决方案。您使用的语言几乎肯定具有可以使这变得简单的库函数。

于 2008-10-16T16:40:29.210 回答
0

但是谷歌没有利用 URL 吗?如果给定文章的某些文本在 URL 中,Google 搜索引擎会使用它吗?但是,如果真的没有很酷的方法来处理非 ascii 字母,那么这些语言在“google-internet”上的优先级较低?

于 2008-10-16T17:17:10.260 回答
0

看看说,http://ja.wikipedia.org/。如果您将鼠标悬停在链接上,它们会在状态栏中显示为日文字符。当您点击链接时,在位置栏中看起来不是那么日本,但这可能无济于事。没有检查,但我认为它都是 utf8 十六进制编码的。

于 2008-10-16T17:49:03.643 回答
0

如果您使用 .NET 而不是

Server.URLEncode( myURL );

但是如果你想使用斯堪的纳维亚字符或任何你想要的字符,你只需要在你的 URL ReWriting 组件中设置规则,因为DynamicWeb CMS软件使用所有可用的字符,只用下划线 ('_') 替换空格

像这个网址:

http://www.gynækologen.dk/Undersøgelser_og_behandlinger.aspx

您可以在域中看到 æ 以及页面名称中的 ø

于 2008-10-16T18:47:55.897 回答