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

som*_*ike 1 php get hyperlink

我试图通过超链接和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";
  }
Run Code Online (Sandbox Code Playgroud)

变量$ title有时包含一个如下所示的条目:

用户"tom"遇到了问题.

变量$ csv正在收集每次传递的所有结果,并创建一个CSV格式的字符串,然后我需要传递给一个新的PHP脚本,我试图使用超链接:

a href="export_csv.php?csv=$csv">Export to CSV</a>
Run Code Online (Sandbox Code Playgroud)

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

Pek*_*ica 6

对于链接中的参数,您需要使用urlencode():

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

但请注意,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>
Run Code Online (Sandbox Code Playgroud)

会议

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

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

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

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