友好的Url问题字符串,带有ñ或重音符号

时间:2015-06-03 15:07:30

标签: php mysql url seo diacritics

好吧,我很开心。我在我的php mysql项目中使用SEO友好的url,一切正常,直到重音或ñ出现。一个例子是“año”或“río”这个词,它给我一个错误信息:

  

未找到

     

请求的URL /año和URL /rÃo/

Conexion.php

$db = new PDO('mysql:host='.$db_host.';dbname='.$db_database, $db_user, $db_pass);$db->exec("set names utf8");

我的数据库整理是:

utf8_general_ci

project.php的url如下所示:

http://www.mywebsite.cl/año

project.php(获取数据并向我发送奇怪的字符的文件,如año或/rÃo/)

<meta charset="utf-8" />

$result->execute(array($_GET['project']));

的.htaccess

AddDefaultCharset utf-8
RewriteRule ^([0-9a-zA-Z\-]+)/$ project.php?work=$1

感谢。

2 个答案:

答案 0 :(得分:1)

国际化域名(IDN)允许在URL中使用非ASCII字符。这是通过将包含非ASCII字符的字符串转换为称为Punycode的ASCII解释并在4-char字符串“xn--”之前进行转换以将其与普通ASCII区分开来完成的。

例如,导航到以下IDN将解析为español.com(最后3个字符表示特殊字符及其位置):

xn--espaol-zwa.com

国际化资源标识符(IRI)是URL的等效修改(参见RFC 3987)。

答案 1 :(得分:0)

我的理解是URI真的不应该包含“外来”/ unicode字符,并且你应该坚持使用ASCII字符。

http://tools.ietf.org/html/rfc3986#section-2

我看到人们处理此问题的最彻底的方法是在两个网址上创建每个网址的副本。例如example.com/úrl和example.com/url,前者实际上将用户重定向到后者。我认为这可能需要通过htaccess或类似的东西来完成。对于搜索引擎优化的目的,您可能希望使用规范,以便不会因重复内容而被标记为。

当然,这是我几年前的理解,unicode角色变得越来越普遍,所以事情可能已经发生了变化。