我有一个UTF8 unicode ci collation数据库,它存储具有特殊字符的值,如:
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
我认为我的问题是“如何才能让字符串显示变音符号,以便我可以用它来搜索/比较等?”但实际上我想知道我是否应该以不同的方式进行搜索?
答案 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