2013-02-13 56 views
0

我想解决外国字符问题,并将它们与数据库值匹配。在一页上提交表单urlencodes获取值,不在另一页上

我已经设法从数据库查询中获得一个匹配,但我现在遇到了一个不同的问题,只是不知道为什么会发生这种情况。

在整个网站的所有页面上都有一个标题包含,其中包含一个用于搜索该网站的输入字段。 <form action="/search.php" method="get"><input name="q" type="text" />etc...

我的问题查询字符串是这样的grønhøj。当我将这个字符串输入到主页上的输入表单中时,我会通过如下URL访问搜索页:search.php?q = gr%F8nh%F8j目前无法正常工作。 但是,如果我然后重新输入相同的搜索查询到搜索页面上的im时,页面重新加载,除了url现在看起来像这样:search.php?q =grønhøj哪些工作。

如果生成的url始终保持不变,那么我没有问题,但因为它不一致,所以我不知道如何为查询字符串的两个可能版本提供解决方案。

所以我想我有2个问题。

1)为什么在使用完全相同的表单提交字符串时url不会保持不变? 2)我如何操纵url的两个版本(或停止导致不同url的不同页面),以便生成的字符串是一致的,而不管我得到哪个版本的url?

更新:我发现了一个函数来检测utf8编码Here这让我转我如何处理URL字符串取决于哪个网址我得到的版本,所以现在我的主要问题是固定的。

我仍然想知道为什么我从不同的页面中得到2个不同的url变量,即使这个表单在整个网站中是一致的包含。有任何想法吗?

回答

1

解决此问题的一种方法是始终使用urldecode()对查询字符串进行解码,然后再对其再次使用urlencode()。这样,如果初始查询字符串被url编码或解码,无论如何,它将再次通过解码和编码过程,这将导致相同的最终查询字符串。

手册 - urlencode

手册 - urldecode

+0

虽然理论上是有道理的,在我的情况下,它没有工作。我认为这是因为已经urlencoded的字符串是没有urlencoded的是utf8编码的,所以当应用urldecode/encode时,得到的字符串每个ø有2%##代码,而不仅仅是我的第一个例子中的代码网址。我发现了一个函数来检测utf8编码,这使我可以切换如何处理工作的字符串。 – Novocaine 2013-02-13 14:55:51

+0

没错,如果你可以检测到utf-8(或者任何其他的字符集编码),那么你几乎可以走了。它解决了你的问题。作为扩展,你可以尝试解码和再次编码,以确保你得到一个纯粹的urlencoded查询字符串。但只有在必要的情况下。如果解码字符集解决了你的问题,那就放在那。 – arijeet 2013-02-13 15:00:59

+0

是的,它似乎现在已经修复,但你的建议确实帮助我发现一个是utf8编码,另一个不是,所以我会接受你的答案,干杯。 – Novocaine 2013-02-13 15:06:29

相关问题