2012-04-27 23 views
0

我有一个奇怪的问题。在我的开发服务器上,所有的东西都可以工作,但是在实时服务器上却不行我有一个文件夹中有一个特殊的字符,如“ö”。在开发服务器我这样做检查,如果文件名是一个目录($ DIR =“coördinatie”):PHP'is_dir'与'urldecode'结合为false,与字符串值相同为真?

if (is_dir(urldecode($dir))) 
    echo "true"; 
else { 
    echo "false"; 
} 

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

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

我尝试了类型转换为字符串等,但我无法弄清楚。希望有人有线索。

+2

检查您在(PHP源文件中定义字符串)中的硬编码文件的编码,并告诉我们关于开发服务器和活动服务器上用于文件系统的编码。 **两个环境的配置是否相同?** – hakre 2012-04-27 13:02:55

回答

2

我的猜测是这样的:

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

您可能必须将字符串转换为您的文件系统所需的编码。
您可以通过比较两个字符串的值bin2hex来确认我的怀疑。

+0

'urldecode'是PHP中的一个二进制安全函数,它编码不可知且始终将二进制8位解码为一个八位字节 - 并非特定的UTF-8。 – hakre 2012-04-27 13:05:54

+0

@hakre真的,应该说URL编码值通常是UTF-8编码的。 – deceze 2012-04-27 13:07:47

+0

字符串和硬编码值的BIN2HEX值的确有所不同: 4943542d436ff67264696e61746f72 4943542d436fc3b67264696e61746f72 我真的不知道如何转换字符串以正确的方式,不知道如何寻找的文件系统编码。 – 2012-04-27 13:20:13

相关问题