[英]PHP Url Encoding Not Encoding Properly
我正在嘗試編碼以下字符串: Peôn
根據: http ://meyerweb.com/eric/tools/dencoder/該字符串應包含: Pe%C3%B4n
當我使用urlencode($name)
我得到Pe%F4n
太丟人了。
我試圖以以下方式使用編碼的字符串:
失敗:
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
://us.battle.net/api/wow/character/Kil%27jaeden/Pe%F4n?fields= http://us.battle.net/api/wow/character/Kil%27jaeden/Pe%F4n?fields=statistics
即使沒有轉義也仍然得到錯誤的編碼...:/
編輯:
根據此網站: http : //www.degraeve.com/reference/urlencoding.php
%F4
是ô
的正確編碼。
好吧,我正得到您所期望得到的。 您的mysqli_real_escape
是這里的罪魁禍首。 去掉它。
另外,利用Prepared Statements
,這樣您就不必專注於轉義和填充。
<?php
$name = 'Peôn';
echo $name = urlencode($name);
輸出:
Pe%C3%B4n
$name = rawurlencode(utf8_encode($name));
絕招。 希望我知道為什么...
問題在於具有表單的頁面。
Web瀏覽器正在發送以latin-1編碼的用戶輸入,但是您希望它發送UTF-8。 解決該問題的一種方法是發送Content-Type標頭,以告知瀏覽器該頁面位於UTF-8中,如果不能執行此操作,則可以使用HTML meta標簽執行相同操作,另一種方法是聲明accept-charset
在表單標記中。
<form accept-charset="UTF-8" method="POST" action="...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.