我是PHP新手,并从http://www.techrepublic.com/article/create-a-dynamic-photo-gallery-with-php-in-three-steps/(在问题的底部)改编了一个脚本,该脚本从目录生成图像表以及一些附带的EXIF数据。但是,这个脚本除了在文件名中包含单个撇号'
的三个图像之外,其他的都可以使用。在一种情况下,脚本输出如下HTML:
<img src='../assets/img/art/Red Sky at Night, Sailor's Delight I.jpg'>
当然是无效的HTML。我不能使用以下脚本
echo '<tr><td rowspan="3"><img src="$dir/$file"></td>';
,因为它会导致由文件名中的撇号引起的PHP错误。
因为:
- 我使用包含图像标题的表格单元格的文件名
- 我希望标题能够包含撇号。
我希望能够在文件名中保留撇号。
是否有任何方法来修复我的PHP脚本,允许我在文件名中保留撇号,同时仍然输出有效的HTML?
<table class="catalog">
<?php
// define directory path
$dir = "../assets/img/art";
// iterate through files
// look for JPEGs
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if (preg_match("/.jpg/", $file)) {
// read EXIF headers
$exif = exif_read_data("$dir/$file", "FILE,COMPUTED,ANY_TAG,IFD0,THUMBNAIL,COMMENT,EXIF", true);
// get image
echo "<tr><td rowspan='3'><img src='$dir/$file'></td>";
// get file name
echo "<th>Title</th><td>" . str_replace(".jpg", "", $file) . "</td></tr>";
// get timestamp
echo "<tr><th>Year</th><td>" . $exif['IFD0']['Copyright'] . "</td></tr>";
// get image dimensions
echo "<tr><th>Description</th><td>" . $exif['IFD0']['ImageDescription'] . "</td></tr>";
}
}
closedir($dh);
}
}
?>
</table>
如果你在HTML中使用双引号,你就不会有这个问题了。
echo '<tr><td rowspan="3"><img src="'.$dir.'/'.$file.'"></td>';
…直到人们开始在文件名中加上双引号:)
从你的问题:
echo '<tr><td rowspan="3"><img src="$dir/$file"></td>';
中的撇号会导致PHP错误文件名。
这不是真的。这种方法的问题是,变量在单引号内不计算,所以在HTML中的输出将是;<tr><td rowspan="3"><img src="$dir/$file"></td>
。这就是为什么我在我的例子中使用字符串连接。