2012-04-02 54 views
6

Chrome时,将这个:aöüß%C3%A4%C3%B6%C3%BC%C3%9F 但Firefox将其转换为这个奇怪的东西在这里:a%F6%FC%DF 我似乎无法找到一种方法来Firefox的东西转换回原来的PHP 。 不幸的是Urldecode和rawurldecode不起作用。有谁知道如何处理?谢谢。差异火狐 - 铬编码变音

回答

5

由于Tei已经猜到:Chrome浏览器使用UTF-8(可能推荐)用于URL参数,而Firefox使用Latin-1。我不认为你可以控制这种行为。此外,这将很难处理,因为你几乎需要猜测使用的编码。

这是怎样的解码工作(依赖于浏​​览器,假设你使用UTF-8的应用程序):

铬:

$text = urldecode($_GET['text']); 

火狐:

$text = utf8_encode(urldecode($_GET['text'])); 

这可能是一个适用于大多数情况的解决方案:

function urldecode_utf8($text) { 
    $decoded = urldecode($text); 

    if (!mb_check_encoding($decoded, 'UTF-8')) { 
     $decoded = utf8_encode($decoded); 
    } 

    return $decoded; 
} 
+0

谢谢,那有效。但是,这些不同的浏览器行为只是吸 - - – Stefan 2012-04-02 11:32:57

+0

是的,我真的很惊讶,Firefox仍然坚持拉丁-1在这里。 – Niko 2012-04-02 11:48:03

+0

太棒了!该功能对我来说完美无缺 – Stefan 2012-04-02 11:51:52

1

强制您的页面使用UTF-8。这些代码可能是不同的编码变音符号。一个是Latin1,另一个可能是UTF-8。

强制utf-8的最佳方式是在html中的元标记中。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
+0

我已经试图通过发送一个标题与PHP和使用HTML元标记强制UTF-8,没有任何工作。它不是一个btw形式,只是一个正常的get参数?text =aöüß – Stefan 2012-04-02 11:11:47

+0

?text =aöüß不是urlencoded。要在javascript中进行编码,您需要encodeURIcomponent以保留编码。要用PHP编码,你可以使用rawurlencode。我不知道你是否需要或不需要rawurldecode如果你rawurldecode一个项目.. – Tei 2012-04-02 11:22:56

+0

追加?text =aöüß到Firefox中的页面,你会发现它会自动编码它为%F6%FC%DF – Stefan 2012-04-02 11:26:41