不能从URL中获取带有特殊字符的字符串


Can't grab string from URL with special characters

我有一个数据库在UTF8 unicode ci排序存储值与特殊字符,如:

oukaïmeden

我希望能够形成这样的url:

example.com/oukaïmeden

example.com/index.php?id=oukaïmeden

在index.php中,我将HTML字符集设置为UTF8(不影响预输出),并将PHP文件保存为UTF8 unicode ci。

然而,无论我做什么,我都无法看到以oukaïmeden的形式获得字符串,因此我可以使用它来搜索数据库。

$aparams = explode("/", $_SERVER["REQUEST_URI"]);
extract($_GET);
$id = utf8_decode($aparams[1]);
echo $id;
echo urldecode($id);
echo utf8_decode($id);
echo utf8_encode($id);  

得到如下值:

ouka%C3%AFmeden
oukaïmeden

我认为我的问题是"我怎么能得到字符串显示变音符,所以我可以用它来搜索/比较等?"但实际上,我想知道我是否也应该以不同的方式搜索?

url不能包含非ascii字符。URL 必须首先看起来像这样:

example.com/index.php?id=ouka%C3%AFmeden

这是UTF-8编码的单词"oukaïmeden"的正确百分比编码表示。浏览器可能会在你的地址栏中显示"oukaïmeden",也可能不会,但实际的URL必须如上所示。

在PHP中,从$_GET读取这个将会得到已经解码的值。因此,要在PHP脚本中获得UTF-8编码的字符串:

$id = $_GET['id'];

是的,就是这样。

下面是使用命令的输出,正确的使用方法是"utf8_encode"

$id = $_GET['id'];
$id = utf8_decode($id);
echo $id."<br />";
echo urldecode($id)."<br />";
echo utf8_decode($id)."<br />";
echo utf8_encode($id)."<br />";  
ouka�meden
ouka�meden
ouka?meden
oukaïmeden