Php Can';t使用特殊字符从URL获取字符串
我有一个UTF8 unicode ci排序的数据库,它存储具有特殊字符的值,如:Php Can';t使用特殊字符从URL获取字符串,php,unicode,encoding,utf-8,Php,Unicode,Encoding,Utf 8,我有一个UTF8 unicode ci排序的数据库,它存储具有特殊字符的值,如: oukaïmeden 我希望能够形成如下URL: example.com/oukaïmeden 或 在index.php中,我将HTML字符集设置为UTF8(这与预输出无关),并将php文件保存为UTF8 unicode ci 但是,无论我做什么,我都无法看到以oukaïmeden的形式获取字符串,因此我可以使用它来搜索数据库 $aparams = explode("/", $_SERVER["REQUEST_
oukaïmeden
我希望能够形成如下URL:
example.com/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
我原以为我的问题是“如何让字符串显示umlaut以便我可以使用它进行搜索/比较等?”但实际上我想知道我是否也应该以不同的方式进行搜索?这里是使用的输出,因此正确使用的是“utf8\u编码”
$id=$\u GET['id'];
$id=utf8\u解码($id);
echo$id.“
”;
echo urldecode($id)。“
”;
回声utf8_解码($id)。“
”;
echo utf8_编码($id)。“
”;
乌卡�梅登
乌卡�梅登
乌卡?梅登
乌卡伊梅登
URL不能包含非ASCII字符。URL必须像下面这样才能正确:
example.com/index.php?id=ouka%C3%AFmeden
这是UTF-8编码单词“oukaïmeden”的正确表示。浏览器可能会也可能不会在地址栏中将其显示为“oukaïmeden”,但实际URL必须如上所述
在PHP中,从$\u GET
读取该值将得到已解码的值。因此,要在PHP脚本中获取UTF-8编码字符串:
$id = $_GET['id'];
是的,就是这样。不需要更多了。谢谢,这是有道理的,但是我仍然用“ouka%C3%AFmeden”而不是“oukaïmeden”来查询我的数据库,它不会返回任何结果。我应该以不同的方式存储数据(编码百分比)还是修改要查询的编码百分比值?同样:从
$\u GET
中获取值,它已经被解码<代码>$\u GET['id']是“oukaïmeden”(UTF-8编码),而不是“ouka%C3%AFmeden”。但这不是我在测试中看到的,我没有使用GET。我在请求_URI$\u SERVER global上使用mod rewrite with htaccess和explode有什么区别吗?如果我只看一下$\u GET['id'],通过extract(),我会得到“oukaÃ'meden”。$\u SERVER
中的数据不会自动解码。您看到的$\u GET
是因为您的浏览器没有将结果解释为UTF-8。“是的,我在最初的帖子中提到过这一点。
example.com/index.php?id=ouka%C3%AFmeden
$id = $_GET['id'];