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