2011-06-03 58 views
1

我想通过超链接和GET方法将一个已包含引号的字符串从一个php文件传递给另一个。PHP传递一个包含通过GET引用的字符串

我检索上千行包含在一个while循环引号和输出保存到一个变量,如下所示:

while ($trouble_row = mysql_fetch_array($trouble_result)) { 
    $ticketid = $trouble_row['ticketid']; 
    $ticketno = $trouble_row['ticket_no'];       
    $created = $trouble_row['createdtime']; 
    $modified = $trouble_row['modifiedtime']; 
    $title = $trouble_row['title']; 
    $solution = $trouble_row['solution']; 
    $hoursattended = $trouble_row['cf_629']; 
    $hoursbilled = $trouble_row['cf_628']; 
    $csv .= "$firstname $lastname,$ticketno,$created,$modified,$hoursattended,$hoursbilled,$title,$solution\n"; 
    } 

变量$标题有时含有看起来像这样的条目:

用户“汤姆”有问题。

变量$ CSV是收集所有来自各循环中的结果,并创建一个CSV格式的字符串,然后我需要传递给一个新的PHP脚本,我试图用一个超链接的事情:

a href="export_csv.php?csv=$csv">Export to CSV</a> 

不幸的是,嵌入的引号被超链接识别并切断了大部分输出。对于如何收集不同的数据,以不同的方式存储数据或以不同的方式传递数据,我们将不胜感激!

回答

6

对于链接参数,你需要使用urlencode()

echo '<a href="export_csv.php?csv='.urlencode($csv).'">Export to CSV</a>'; 

然而要注意的GET请求有开始在1-2K区域(取决于浏览器和服务器)长度的限制。

替代方法:

形式

一种方法,不受长度限制被创建用于每个链路一个<form>元件与method="post"和在<input type='hidden'>输入添加的值。然后,您会像链接一样设置表单的提交按钮。

<form action="export_csv.php" method="post"> 
<input type="hidden" name="csv" value="......."> 
<button type="submit">Click here </button> <!-- Use CSS to style --> 
</form> 

会议

另一种非常优雅的方式来传递数据将

  • 生成随机密钥
  • $_SESSION变量与随机密钥
  • 保存CSV数据
  • 在URL中传递随机(短)键而不是完整的数据

你只需要照顾经常删除未使用的随机密钥(及其数据)。

当然,这些链接不能加书签。

+0

感谢伟大的答案!我喜欢这个社区。 – somecallmemike 2011-06-03 18:14:29

0
+0

在PHP中,它是urlencode()和urldecode()。另请注意,如果使用$ _GET,则不应使用url_decode()。 $ _GET超全局已经被解码,并且在$ _GET上使用url_decode()会导致错误的结果。 – Trott 2011-06-03 17:10:58

0

最快,给你已经拥有最简单的解决办法可能是改变这一点:

<a href="export_csv.php?csv=$csv">Export to CSV</a> 

为了这样的事情:

<a href="export_csv.php?csv=urlencode($csv)">Export to CSV</a> 
相关问题