PHP Url编码未正确编码

时间:2013-11-16 17:21:10

标签: php mysql sql function utf-8

我正在尝试编码以下字符串:Peôn

根据:http://meyerweb.com/eric/tools/dencoder/字符串应包含在:Pe%C3%B4n

当我使用urlencode($name)时,我得到Pe%F4n

SOOOO迷失了。

我试图以下列方式使用编码字符串:

失败:

  

http://us.battle.net/api/wow/character/Kil%27jaeden/Pe%F4n?fields=statistics

作品:

  

http://us.battle.net/api/wow/character/Kil%27jaeden/Pe%C3%B4n?fields=statistics

mycode的:

$name = mysqli_real_escape_string($connection, $_POST['name']);
$name = urlencode($name);

编辑:

$name = $_POST['name'];
$realm = mysqli_real_escape_string($connection, $_POST['realm']);
$locale = mysqli_real_escape_string($connection, $_POST['locale']);
$toon = query_blizz_toon($name, $realm, $locale);

function query_blizz_toon($name, $realm, $locale){  
    $realm = urlencode(stripslashes($realm));
    $name = urlencode($name);
    $q = 'http://'.$locale.'.battle.net/api/wow/character/'.$realm.'/'.$name.'?fields=statistics';
    echo $q;
    $character = @file_get_contents($q);
    $character = json_decode($character);
    return $character;
}

echo $q输出:http://us.battle.net/api/wow/character/Kil%27jaeden/Pe%F4n?fields=statistics

即使没有转义,仍然会得到错误的编码......:/

编辑:

根据此网站:http://www.degraeve.com/reference/urlencoding.php

%F4ô ...

的正确编码

3 个答案:

答案 0 :(得分:6)

好吧,我得到了你期望得到的。您的 mysqli_real_escape 是罪魁祸首。删除它。

此外,请使用 Prepared Statements ,这样您就不必专注于转义和填充内容。

<?php
$name = 'Peôn';
echo $name = urlencode($name);

<强>输出:

Pe%C3%B4n

答案 1 :(得分:1)

$name = rawurlencode(utf8_encode($name));

诀窍。希望我知道为什么......

答案 2 :(得分:0)

问题在于具有表单的页面。

Web浏览器正在发送以latin-1编码的用户输入,但您希望它发送UTF-8。解决这个问题的一种方法是发送Content-Type标头告诉浏览器该页面是UTF-8,如果你不能这样做,你可以使用HTML元标记来做同样的事情,而另一种方法是声明{表单标记中的{1}}。

accept-charset
相关问题