2015-01-13 46 views
1

我试图在URL中使用特殊的danish字符作为GET参数。因此,例如,我有这个网址:数据库选择的URL中的特殊字符

 http://example.com?name=åge 

该网址将获得自动转换成ASCII等效,所以在URL它将读取:

http://example.com?name=%E5ge 

当我访问并打印出值它工作得很好,并显示该参数为: åge

但是,我使用它来选择我的数据库中的东西,这将无法正常工作。如果我在URL中使用ASCII版本,它将不会选择任何形式的数据库,只是给我一个空的结果。如果我强迫的URL不使用ASCII,所以它是:http://example.com?name=åge从数据库中选择时,它会正常工作,但是当我显示的参数也显示了这一点: Ã¥

我不知道怎么去解决这个。任何帮助表示赞赏。

+1

'%E5'不是ASCII码,而是ISO-8859-1。 (ASCII仅为7位)。您应该使用UTF-8,而不是在URL编码请求中(→→%C3%A5')和输出处理中('Ã¥'是\ xC3 \ xA5的外观当解释为latin1)。你的数据库正在做正确的事情。 – mirabilos

+0

哦好吧,但我该怎么做呢? 如果我正在制作这样的链接: 然后链接将使用您所谈论的ISO编码,将å转换为%E5 。那么我怎么强制它使用UTF-8编码呢? –

+0

浏览器通常应该使用UTF-8编码本身(MSIE5.0有一个配置选项,虽然它通常关闭,但不知道更新的版本)如果你首先将你的页面作为UTF-8发布,浏览器可能会得到一些线索,我还没有看到浏览器不会像UTF-8一样编码为 – mirabilos

回答

1

我将参数转换为UTF-8,然后准备一个UTF-8查询数据库,像这样的东西:

$name = utf8_encode($_GET['name']); 
mysqli_query($mysqli_connector, "SET NAMES UTF8"); 

,然后准备查询。

这应该工作。

我希望有帮助!

+0

啊,这是个窍门,我手动编码/解码 –

+0

尽管它仍然像这样表现出来:即使在解码之后,它也可以工作当我把它扔进数据库时(不知道为什么)仍然在页面上显示?有任何想法吗? –

+0

编码网站时,字符集总是一个问题。根据我的经验,我总是将数据库,文件编码和HTML设置为UTF-8 就你而言,如果你开发了很多......我不知道。尝试使用编码/解码或将html代码更改为utf8 SpongePablo