Jac*_*cco 19 php url-rewriting diacritics
我重写URL以包含用户生成的travelblogs的标题.
我这样做是为了URL和SEO的可读性.
http://www.example.com/gallery/280-Gorges_du_Todra/
第一个整数是id,其余的是我们人类(但与请求资源无关).
现在人们可以编写包含任何UTF-8字符的标题,但大多数都不允许在URL中.我的听众通常都是说英语的,但是因为他们旅行,他们喜欢包括像
Aït Ben Haddou
在Linux上使用PHP在URL中显示它的正确方法是什么?
到目前为止,我见过几种解决方案:
只是删除所有不允许的字符,替换空格这有奇怪的结果:
'Aït Ben Haddou' ? /gallery/280-At_Ben_Haddou/
不是真的有用.
只是删除所有不允许的字符,替换空格,离开charcode(stackoverflow.com)最有可能因为使用'正则表达式'
这会产生奇怪的结果:
'tést tést' ? /questions/0000/t233st-t233st
转换为"最接近的等价物"
'Aït Ben Haddou' ? /gallery/280-Ait_Ben_Haddou/
但这对德国人来说是错误的; 例如'ü'应该音译'ue'.
对我来说,作为一个荷兰人,第三个结果"看起来"是最好的.
但我很确定(1)很多人会有不同的看法,(2)在德国的例子中,这是完全错误的.
第3个选项的另一个问题是:如何找到可以转换为7位等效的所有可能字符?
所以问题是:
在您看来,什么是最理想的结果.(在技术限制范围内)
如何从技术上解决它.(用PHP获得所需的结果).
Ben*_*ank 16
最终,对于这个问题,你将不得不放弃"正确"的想法.无论你如何操作,翻译字符串都会破坏兼容性和可读性名称的准确性.所有三个选项都同样兼容,但#1和#2在可读性方面受到影响.因此,只需运行它,然后选择最佳效果 - 选项#3.
是的,德语的翻译是错误的,但除非你开始要求你的用户指定他们的标题所用的语言(并将它们限制为只有一种语言),否则你不会在不费力的情况下解决这个问题.(例如,通过每个已知语言的字典运行标题中的每个单词,并根据其语言规则翻译该单词的变音符号将起作用,但它过多.)
或者,如果德语比其他语言更受关注,那么当翻译时,您的翻译总是使用德语版本:ä→ ae,ë→ e,ï→ i,ö→ oe,ü→ ue.
编辑:
哦,至于实际的方法,我会翻译特殊情况,如果有的话,通过str_replace,然后iconv用于其余的:
$text = str_replace(array("ä", "ö", "ü", "ß"), array("ae", "oe", "ue", "ss"), $text);
$text = iconv('UTF-8', 'US-ASCII//TRANSLIT', $text);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6980 次 |
| 最近记录: |