Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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';is#u dir';与';urldecode';是否为false,与字符串值相同是否为true?_Php_Character Encoding_Filesystems - Fatal编程技术网

PHP';is#u dir';与';urldecode';是否为false,与字符串值相同是否为true?

PHP';is#u dir';与';urldecode';是否为false,与字符串值相同是否为true?,php,character-encoding,filesystems,Php,Character Encoding,Filesystems,我有个奇怪的问题。在我的开发服务器上,所有的东西都可以工作,但在实时服务器上却不行。我有一个文件夹,里面有一个特殊的字符,比如“ö”。在开发服务器上,我这样做是为了检查文件名是否是一个目录($dir=“coöordinate”): 结果是正确的。在实时服务器上,结果为false。奇怪的是。。。硬编码字符串工作正常,结果为真。像这样: if (is_dir("coördinatie")) echo "true"; else { echo "false"; } 我试着用字符串之类的东

我有个奇怪的问题。在我的开发服务器上,所有的东西都可以工作,但在实时服务器上却不行。我有一个文件夹,里面有一个特殊的字符,比如“ö”。在开发服务器上,我这样做是为了检查文件名是否是一个目录($dir=“coöordinate”):

结果是正确的。在实时服务器上,结果为false。奇怪的是。。。硬编码字符串工作正常,结果为真。像这样:

 if (is_dir("coördinatie"))
  echo "true";
 else {
  echo "false";
 }

我试着用字符串之类的东西打字,但我弄不懂。希望有人有线索。

我的猜测是:

urldecode
通常解码为UTF-8。
您的硬编码字符串可能是拉丁语-1,因为源代码是这样保存的。
本地机器上的文件系统(函数)类似于Unicode,生产机器上的文件系统(函数)类似于Latin-1

您可能需要将字符串转换为文件系统所需的编码。

您可以通过比较两个字符串的
bin2hex
的值来确认我的怀疑。

检查您使用hardencoding的文件的编码(定义字符串的PHP源文件),并告诉我们开发服务器和live服务器上的文件系统使用的编码。这两种环境的配置是否相同?
urldecode
是PHP中的一个二进制安全函数,它编码不可知,并且总是解码为二进制8位作为一个八位字节-不特别是UTF-8。@hakre-True,应该说URL编码的值通常是UTF-8编码的。字符串和硬编码值的bin2hex值确实不同:4943542D436FF6726466E61746F72 4943542d436fc3b67264696e61746f72我真的不知道如何以正确的方式转换字符串,也不知道如何查找文件系统编码。我找到了它并使用了:iconv(“UTF-8”、“ISO-8859-1//translatit”、urldecode($dir));转换我的字符串,现在一切都好了。谢谢你的帮助。
 if (is_dir("coördinatie"))
  echo "true";
 else {
  echo "false";
 }