无法从带有特殊字符的URL中获取字符串

时间:2015-10-15 09:24:20

标签: php unicode encoding utf-8

我有一个UTF8 unicode ci collat​​ion数据库,它存储具有特殊字符的值,如:

oukaïmeden

我希望能够形成以下网址:

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

我认为我的问题是“如何才能让字符串显示变音符号,以便我可以用它来搜索/比较等?”但实际上我想知道我是否应该以不同的方式进行搜索?

2 个答案:

答案 0 :(得分:1)

网址不能包含非ASCII字符。网址 必须 首先看起来是正确的:

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

这是UTF-8编码的单词“oukaïmeden”的正确percent-encoded表示。浏览器可能会也可能不会在地址栏中将其显示为“oukaïmeden”,但实际网址必须与上面一样。

在PHP中,从$_GET读取此内容将为您提供已解码的值。因此,要在PHP脚本中获取UTF-8编码的字符串:

$id = $_GET['id'];
是的,就是这样。没有更多需要。

答案 1 :(得分:-2)

这是输出使用,所以正确使用的是“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