我试图通过超链接和GET方法将一个已经包含引号的字符串从一个php文件传递到另一个php文件。
我正在检索数千行,这些行在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";
}
变量$ title有时包含一个如下所示的条目:
用户“tom”遇到问题。
变量$ csv正在收集每次传递的所有结果并创建一个CSV格式的字符串,然后我需要传递给一个新的PHP脚本,我试图用超链接做这个:
a href="export_csv.php?csv=$csv">Export to CSV</a>
不幸的是,嵌入的引号被超链接识别并切断了大部分输出。有关如何以不同方式收集数据,以不同方式存储或以不同方式传递数据的任何建议将非常感谢!
答案 0 :(得分: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
变量中
您只需要经常删除未使用的随机密钥(及其数据)。
当然,这些类型的链接无法加入书签。
答案 1 :(得分:2)
在创建超链接网址之前使用urlencode(),并使用urldecode()获取原始字符串。
答案 2 :(得分:1)
使用urlencode()
嵌入到链接中,使用html_special_chars()
嵌入表单字段。
答案 3 :(得分:0)
答案 4 :(得分:0)
根据您已有的最快和最简单的解决方案可能会改变这一点:
<a href="export_csv.php?csv=$csv">Export to CSV</a>
对于这样的事情:
<a href="export_csv.php?csv=urlencode($csv)">Export to CSV</a>