我有一個函數可以在99%的時間內生成縮略圖。在試圖創建縮略圖的400張圖片中,只有2張圖片失敗。兩張圖片都有單引號,我想知道這是否是問題的根源?如果是這樣,我該怎麼辦才能修復它?如何使用PHP處理文件名中的引號
<?php
$image = "542Cute pets' hilarious snail dwelling life (06).jpg";
$image = "598BK_Fish'n_Crisp.jpg";
if ($image) {
make_thumb("uploads", "thumbnails", $image, 500);
echo $image;
}
function make_thumb($imageFrom, $imageTo, $image, $thumbWidth) {
/* read the source image */
$getFrom = $imageFrom."/".$image;
$imageType = exif_imagetype($getFrom);
if ($imageType == IMAGETYPE_JPEG) {
$source_image = imagecreatefromjpeg($getFrom);
}
else if ($imageType == IMAGETYPE_PNG) {
$source_image = imagecreatefrompng($getFrom);
}
else if ($imageType == IMAGETYPE_GIF) {
$source_image = imagecreatefromgif($getFrom);
}
$width = imagesx($source_image);
$height = imagesy($source_image);
/* find the "desired height" of this thumbnail, relative to the desired width */
$thumbHeight = floor($height * ($thumbWidth/$width));
/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($thumbWidth, $thumbHeight);
/* copy source image at a resized size */
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0,
$thumbWidth, $thumbHeight, $width, $height);
/* create the physical thumbnail image to its destination */
$dest = $imageTo."/".$image;
if ($imageType == IMAGETYPE_JPEG) {
imagejpeg($virtual_image, $dest);
}
else if ($imageType == IMAGETYPE_PNG) {
imagepng($virtual_image, $dest);
}
else if ($imageType == IMAGETYPE_GIF) {
imagegif($virtual_image, $dest);
}
} //end of function make_thumb($imageFrom, $imageTo, $image, $thumbWidth)
?>
注: 我從數據庫中獲取圖像的名稱。這就是它看起來像在數據庫:
542Cute pets' hilarious snail dwelling life (06).jpg
598BK_Fish'n_Crisp.jpg
這取決於你是如何得到的圖像名稱。如果你將它們存儲在一個mysql數據庫中,然後檢索它們,你應該在將它們插入到數據庫之前轉義單引號。 – Brian
@Brian我從數據庫中獲取圖像名稱,並且已經在上面進行了編輯,以向您展示圖像名稱在數據庫中的樣子。 – jessica
嗨@jessica,你可能想要在生成縮略圖之前將其解碼回原來的文件名:$ image = html_entity_decode($ image);因爲它試圖用這個文件名查找圖像:「598BK_Fish ' n_Crisp.jpg」當它實際上是,應該是「598BK_Fish'n_Crisp.jpg」。讓我們知道它是怎麼回事,我也發佈了這個作爲我的答案的評論。 :) –