Php 在一页上提交表单URL编码获取值,不';我不在另一页上

Php 在一页上提交表单URL编码获取值,不';我不在另一页上,php,url,character-encoding,Php,Url,Character Encoding,我试图用外来字符来解决一个问题,并将这些字符与数据库值进行匹配 我已经成功地从数据库查询中获得了我想要的匹配项,但是现在我遇到了一个不同的问题,根本不知道为什么会发生这种情况 在整个站点的所有页面上都有一个标题include,它有一个用于搜索站点的输入字段。 等.. 我的问题查询字符串是这个grønhøj。当我在主页的输入表单中输入这个字符串时,我会被带到搜索页面,其url如下:search.php?q=gr%F8nh%F8j,目前不起作用。 但是,如果我在搜索页面上输入im时将相同的搜索查询重

我试图用外来字符来解决一个问题,并将这些字符与数据库值进行匹配

我已经成功地从数据库查询中获得了我想要的匹配项,但是现在我遇到了一个不同的问题,根本不知道为什么会发生这种情况

在整个站点的所有页面上都有一个标题include,它有一个用于搜索站点的输入字段。
等..

我的问题查询字符串是这个grønhøj。当我在主页的输入表单中输入这个字符串时,我会被带到搜索页面,其url如下:search.php?q=gr%F8nh%F8j,目前不起作用。 但是,如果我在搜索页面上输入im时将相同的搜索查询重新输入到标题输入中,则页面会重新加载,但url现在看起来是这样的:search.php?q=grønhøj,这是可行的

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

所以我想我有两个问题

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

更新:我找到了一个检测utf8编码的函数,该函数允许我根据获取的url版本切换如何处理url字符串,因此现在我的主要问题已经解决


然而,我仍然想理解为什么我从不同的页面获得了两个不同的url变量,尽管表单在整个站点上是一致的。有什么想法吗?

解决此问题的一种方法是始终使用
urldecode()
对查询字符串进行解码,然后再次强制使用
urldecode()
。这样,如果最初的查询字符串是url编码或解码的,不管怎样,它都将再次经历解码和编码过程,这将导致相同的最终查询字符串

手册-


手动-

虽然理论上这是有道理的,但在我的情况下,它不起作用。我认为这是因为已经urlencoded的字符串是按原样编码的,而非urlencoded的字符串是utf8编码的,所以当应用urldecode/encode时,结果字符串的每个ø都有2%的代码,而不仅仅是我的第一个示例url中的代码。我找到了一个检测utf8编码的函数,该函数允许我切换如何处理工作的字符串。好的,如果你能检测到utf-8(或任何其他字符集编码),那么你就很好了。它解决了你的问题。作为扩展,您可以尝试再次解码和编码,以确保返回一个纯URL编码的查询字符串。但只有在必要的时候。如果解码字符集解决了你的问题,那就到此为止。是的,现在似乎已经解决了,但你的建议确实帮助我发现一个是utf8编码的,另一个不是,所以我会接受你的答案,干杯。太好了!很高兴我能帮忙。祝你好运