我正在开发一个使用UTF8显示非英文字符的国际网站。我也使用包含项目名称的友好URL。显然我不能在URL中使用非英文字符。
这种转换是否存在某种常见做法?我不确定我应该用哪些英文字符替换它们。有些是非常明显的(比如è到e),但是我不熟悉的其他角色(例如ß)。
答案 0 :(得分:6)
您可以在URL路径中使用UTF-8编码数据。您只需要使用Percent encoding对其进行编码(请参阅rawurlencode
):
// ß (U+00DF) = 0xC39F (UTF-8)
$str = "\xC3\x9F";
echo '<a href="http://en.wikipedia.org/wiki/'.rawurlencode($str).'">'.$str.'</a>';
这将回显http://en.wikipedia.org/wiki/ß的链接。现代浏览器将在位置栏中显示字符ß
,而不是UTF-8(%C3%9F
)中该字符的百分比编码表示。
如果您不想使用UTF-8但只想使用ASCII字符,我建议使用像ÁlvaroG。Vicario建议的音译。
答案 1 :(得分:5)
我通常使用iconv()和'ASCII // TRANSLIT'选项。这需要输入:
último año
并生成如下输出:
'ultimo a~no
然后我用preg_replace()用短划线替换空格:
'ultimo-a~no
...并删除不需要的字符,例如
[^a-z0-9-]
它可能与阿拉伯语或中文没用,但它适用于西班牙语,法语或德语。
答案 2 :(得分:3)
显然我不能在URL中使用非英文字符。
事实上,你可以。维基百科软件(内置于PHP)支持这一点,例如en.wikipedia.org/wiki/☃
请注意,您需要对URL进行适当编码,如其他答案中所示。
答案 3 :(得分:2)
使用rawurlencode
对您的网址名称进行编码,并使用rawurldecode
将网址中的名称转换回原始字符串。这两个函数根据RFC 1738将URL转换为URL或从URL转换。
答案 4 :(得分:-1)
上次我尝试过(大约一周前),UTF-8(特别是日语)字符在URL中运行良好,没有任何额外的编码。甚至在我测试的所有浏览器(Safari,Chrome和Firefox,都在Mac上)的地址栏中看起来都是正确的,我不知道我的女朋友在Windows上使用了什么浏览器。除了大多数Windows安装,我只是为日文字符显示正方形,因为它们缺少显示它们所需的字体,它似乎在那里工作正常。
我尝试的网址是:http://www.webghoul.de.private-void.net/cache/black-f-with-あい-50.png(WMD似乎不喜欢它)
Proof by screenshot http://heavymetal.theredhead.nl/~kris/stackoverflow/screenshot-utf8-url.png
因此规范可能实际上不允许这样做,因为我已经看到它的全面运作,除了可能在那些喜欢规范的编辑器中; - )
我实际上不建议在URL中使用这些类型的字符,但我也不会将其作为“修复”的首要任务。