我是一个新手,尝试使用数据库为图库编写PHP脚本。我最近更改了脚本和数据库,以便库将基于'photo_caption运行。画廊有效,但如果数据库包含引号(例如标题为自然的花园和颜色),剧本只会在引号之前拉出部分(所以这里只是自然而不是整个标题自然的花园和颜色),从而打破链接。现在,链接结构与此/viewgallery.php?cname=Colorado%20Journies&pcaption=Nature'sGardenAndColors
类似,但由于问题显示为/viewgallery.php?cname=Colorado%20Journies&pcaption=Nature
这个问题有解决方法吗?如何获取$ _GET语句来提取完整的photo_caption,包括引号?谢谢你的帮助...
我现在使用此代码获取链接
的photocaption$pcaption = isset($_GET['pcaption']) ? ($_GET['pcaption']) : 0;
if($ pcaption) {
$result = mysql_query( "SELECT photo_caption, photo_description, photo_filename,photo_keywords FROM gallery_photos WHERE photo_caption='".addslashes($pcaption)."'" );
list($photo_caption, $photo_description, $photo_filename, $photo_keywords) = mysql_fetch_array( $result );
$nr = mysql_num_rows( $result );
mysql_free_result( $result );
$p_caption = $photo_caption;
$p_description = $photo_description;
$p_keywords = $photo_keywords;
//fill pid_array with sorted pids in current category
$result = mysql_query( "SELECT photo_caption FROM gallery_photos WHERE category_name='".addslashes($cname)."' ORDER BY photo_caption" );
$ct = mysql_num_rows( $result );
while ($row = mysql_fetch_array($result)) {
$pid_array[] = $row[0];
}
mysql_free_result( $result );
if( empty($nr ) )
{
print "%%%%NR is $nr";
$result_final = "\t<tr><td>***No Photo found</td></tr>\n";
}
else
{
$result = mysql_query( "SELECT category_name FROM gallery_category WHERE category_name='".addslashes($cname)."'" );
list($category_name) = mysql_fetch_array( $result );
mysql_free_result( $result );
$result_final = "
<div class=limagePage>
<div class=llink><a href='viewgallery.php'>ALBUMS</a><span class=arrow>>></span><a href='viewgallery.php?cname=$cname>$category_name'</a></div>
";
// display previous and next links if more than one photo
if ($ct > 1)
{
$key = array_search($pcaption , $pid_array);
$prev = $key - 1;
if ($prev < 0) $prev = $ct - 1;
$next = $key + 1;
if ($next == $ct) $next = 0;
//$cname = str_replace(" ","_",$cname);
//$pcaption=str_replace(" ","_",$pcaption);
$result_final .= "<div class='prevnext'>";
$result_final .= "<span class='prev'><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$next]."'><img src='photos/assets/left.png' border='0' ></a></span>";
$result_final .= "<span class='next'><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$prev]."'><img src='photos/assets/right.png' border='0' ></a></span>";
$result_final .= "</div>";
}
}
//$cname = str_replace(" ","_",$cname);
//$pcaption=str_replace(" ","_",$pcaption);
$result_final .= "<div class=limage><table><tr><td><table class=image><tr>\n\t<td><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$next]."'><img src='".$images_dir."/".$photo_filename."' border='0' alt='".$photo_keywords."' /></a>
<div class=caption>".$photo_caption."</div>
<div class='excerpt'>".$photo_description."</div>
</td>
</tr></table></td></tr></table><div class=underline></div></div>
<!-- .limagePage --></div> ";
答案 0 :(得分:3)
答案 1 :(得分:1)
不幸urlencode
不会影响'
尝试str_replace("'", "%27", $pid_array[$next])
也许会有所帮助。例如,它适用于地址栏中的Google。
UPD rawurldecode
(当然,更正:rawurlencode
)可以做到这一点,无论如何,链接看起来有点难看,充满了%53,% 27,等等。但在使用之前不要忘记urldecode($_GET['pcaption'])
答案 2 :(得分:0)
您需要在链接之前对网址进行编码,如下所示:
<a href='viewgallery.php?cname=$cname&pcaption=".urlencode($pid_array[$next])."'>
否则认为链接会提前截止,因为链接将如下所示:
<a href='viewgallery.php?cname=$cname&pcaption=Nature's photo'>
^ ends the link
答案 3 :(得分:0)
使用http_build_query()。使用此函数,您可以将数组转换为http查询,例如:
$ data = array('name'=&gt;'我的名字','城市'=&gt;'我的城市');
$ url =“http://your_url.com/?” 。 http_build_query($数据);
答案 4 :(得分:0)
rawurlencode($pid_array[$next])
也应该这样做。
请注意,使用变量解析引号会使用更多处理。因为你已经中途做了..
$result_final .= "<span class='prev'><a href='viewgallery.php?cname=$cname&pcaption=".$pid_array[$next]."'><img src='photos/assets/left.png' border='0' ></a></span>";
可以换成:
$result_final .= '<span class="prev"><a href="viewgallery.php?cname='.urlencode($cname).'&pcaption='.urlencode($pid_array[$next]).'"><img src="photos/assets/left.png" border="0" ></a></span>';
也&amp;不是HTML有效,&amp; amp; 现在html有效,引用无关紧要,cpuwise效率更高。
答案 5 :(得分:0)
每个试图帮助我的人......我要感谢大家的帮助。我发现除了数据库中的引号“空格”,其中photo_caption也会引起问题。所以我试着修剪代码中的空格(它工作)并决定现在避免引用。只是想留下一个跟进记录......谢谢大家。