Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t使用特殊字符从URL获取字符串_Php_Unicode_Encoding_Utf 8 - Fatal编程技术网

Php Can';t使用特殊字符从URL获取字符串

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_

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

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'];