不同浏览器(PHP)中$_GET参数的元音变音符问题


Umlauts issue with $_GET parameter in different browsers (PHP)

我正在开发一个服务,您可以通过get参数向该服务发送不同的参数。

例如:

www.example.com?query=john&location=。。。

也可以向该服务发送变音。

Ex。

www.example.com?query=müller

我现在的问题是,我对参数如何发送到我的服务没有影响,所以我决定对它进行大量测试,并发现如果你试图通过我们的内部系统(使用Sharepoint运行)调用它,如果你使用Internet Explorer,事情就会变得奇怪。首先,这些参数看起来像这样,上面的第二个例子是:

www.example.com?查询=m�ller

我已经可以检测到,如果有人在使用IE,但我仍然不确定如何解决这个问题。

我已经尝试过使用urlencode()(以及许多其他函数,但它们并没有真正改变结果),它返回m%3Fller。在这种情况下,我想要的输出是m%C3%BCller

有可能用我的服务解决这个问题吗?还是Sharepoint中的问题?我已经用一个简单的HTML表单复制了szenario,它将所有必需的参数都作为简单的文本字段,在那里工作得很好。

编辑:

我想要的输出是url(ü => %C3%BC)的正确形式的元音变音符

将此代码放在PHP代码的第一行中:

header('Content-Type: text/html; charset=utf-8');

它将字符集更改为支持Ü的utf-8。

您也可以使用htmlentitiesÜ更改为üuuml;,但如果您不想这样做,您也可以只使用urlencode,它返回一个字符串,其中包含除-_之外的所有非字母数字字符。已替换为百分号(%),后跟两个十六进制数字和编码为加号(+)的空格。

来源:
http://php.net/manual/en/function.htmlentities.php
http://php.net/manual/en/function.urlencode.php

它通过窗体吗?如果是这样的话,对我来说,这就解决了问题,只需将accept charset="UTF-8"添加到表单中即可

这取决于您的页面编码,我建议如果可以将其更改为UTF-8,那么示例如下:

<?php
$txt = "müller";
$output = urlencode($txt);
var_dump($output);

将为您返回适当的价值:

string(11) "m%C3%BCller"