PHP通过GET传递包含引号的字符串

时间:2011-06-03 17:04:20

标签: php hyperlink get

我试图通过超链接和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>

不幸的是,嵌入的引号被超链接识别并切断了大部分输出。有关如何以不同方式收集数据,以不同方式存储或以不同方式传递数据的任何建议将非常感谢!

5 个答案:

答案 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>

<强>会话

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

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

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

当然,这些类型的链接无法加入书签。

答案 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>