我正在尝试编码以下字符串: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
是ô
...
答案 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