我有超过100万条文件路径记录保存到mysql数据库的一列中。我正在尝试制作一个应用程序来提取可能有不同路径的类似文件,并用PHP对它们进行排列。我已经设置好了数据库,现在我正试图让我的PHP正常工作,但遇到了以下警告,而且它甚至没有正确创建数组,如果你查看以下输出并将其与文件目录进行比较,你会注意到,甚至会出现奇怪的段落符号,文件名也会变得混乱。
array(4) {
[0]=> string(42) "2013-01-17-141325589_2013-01-18-j-CP08.45"
[1]=> string(3) "ar¶"
[2]=> string(10) "loc¶66hygh"
[3]=> string(23) "dfgh est_file1.jpg.meta"
}
这是我的代码:
$filepath = "2013-01-17-141325589_2013-01-18-j-CP08'45645'5'ar'666'loc'66666hygh'dfgh'test_file1.jpg.meta";
$pieces = explode("''", $filepath);
var_dump($pieces);
?>
通过使用双引号,PHP进入模板模式。例如,'456
将被视为八进制值。
只需使用单引号'
就可以解决您的问题。
只需将双引号改为单引号,字符串就不会被解析。
生成数组的问题是必须转义$filepath
中的反斜杠。以下代码按预期工作:
<?php
$filepath = "2013-01-17-141325589_2013-01-18-j-CP08''45645''5''ar''666''loc''66666hygh''dfgh''test_file1.jpg.meta";
$pieces = explode("''", $filepath);
var_dump($pieces);
?>
当反斜杠没有转义时,它们本身就充当转义字符,这会在路径中导致意外行为。
然而,您可能会发现pathinfo()
函数与您正在做的事情更相关。
'xxx
(其中xxx
是0-7范围内的数字)被解释为八进制数。因此,例如,代码中的'666
被视为八进制666,并被视为十六进制0x1B6/十进制438,即¶
字符。