PHP передает строку, содержащую цитаты через GET - PullRequest
1 голос
/ 03 июня 2011

Я пытаюсь передать строку, которая уже содержит кавычки, из одного файла 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";
  }

Переменная $ title иногда содержит запись, которая выглядит следующим образом:

У пользователя "Том" проблемы.

Переменная $ csv собирает все результаты каждого прохода и создает строку в формате CSV, которую мне затем нужно передать в новый скрипт php, который я пытаюсь сделать с помощью гиперссылки:

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

К сожалению, встроенные кавычки распознаются по гиперссылке и обрезают большую часть выходных данных. Будем очень благодарны за любые предложения о том, как по-другому собирать данные, хранить их по-другому или передавать по-другому!

Ответы [ 5 ]

6 голосов
/ 03 июня 2011

Для параметров в ссылках необходимо использовать 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 вместо полных данных

Вам просто нужно позаботиться о частом удалении неиспользуемых случайных ключей (и их данных).

Такие ссылки, разумеется, не могут быть добавлены в закладки.

2 голосов
/ 03 июня 2011

Используйте urlencode () перед созданием URL-адреса гиперссылки и используйте urldecode () для получения исходной строки.

1 голос
/ 03 июня 2011

используйте urlencode() для встраивания в ссылку и html_special_chars() для встраивания в поля формы.

0 голосов
/ 03 июня 2011

Самое быстрое и простое решение, учитывая то, что у вас уже есть, вероятно, это изменить:

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

Примерно так:

<a href="export_csv.php?csv=urlencode($csv)">Export to CSV</a>
0 голосов
/ 03 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...