2011-06-03 98 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> 
相關問題