簡體   English   中英

PHP網址編碼未正確編碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM