2011-06-03 2 views
1

J'essaie de transmettre une chaîne qui contient déjà des guillemets d'un fichier php à un autre via un lien hypertexte et la méthode GET.PHP passer une chaîne contenant des citations via GET

Je suis en train de récupérer des milliers de lignes qui contiennent des guillemets dans une boucle while et enregistrer la sortie à une variable comme suit:

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"; 
    } 

La variable $ title contient parfois une entrée qui ressemble à ceci:

L'utilisateur "tom" rencontre des problèmes.

La variable $ csv recueille tous les résultats de chaque passage et la création d'une chaîne au format CSV que j'ai besoin alors de passer à un nouveau script php, que je suis en train de le faire en utilisant un lien hypertexte:

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

Malheureusement, les guillemets intégrés sont reconnus par le lien hypertexte et coupent la majorité de la sortie. Toute suggestion sur la façon de collecter les données différemment, de les stocker différemment ou de les transmettre différemment serait grandement appréciée!

Répondre

6

Pour les paramètres dans les liens, vous devez utiliser urlencode():

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

noter cependant que les requêtes GET ont des limites de longueur à partir de la zone 1-2k (selon le navigateur et le serveur).

approches alternatives:

Forms

une méthode qui est à l'abri des limites de longueur est de créer un élément <form> pour chaque liaison avec method="post" et en ajoutant les valeurs dans les entrées <input type='hidden'>. Vous devez ensuite styler le bouton de soumission du formulaire comme un lien.

<form action="export_csv.php" method="post"> 
<input type="hidden" name="csv" value="......."> 
<button type="submit">Click here </button> <!-- Use CSS to style --> 
</form> 

Sessions

Une autre façon très élégante de transmettre les données seraient

  • Génération d'une clé aléatoire
  • Sauvegarde des données CSV dans une variable $_SESSION avec la
  • clé aléatoire
  • Passer la clé aléatoire (courte) dans l'URL au lieu des données complètes

Vous devez simplement prendre soin de supprimer fréquemment les clés aléatoires non utilisées (et leurs données).

Ces types de liens ne pouvaient évidemment pas être mis en signet.

+0

Merci pour la grande réponse! J'aime cette communauté. – somecallmemike

2

Utilisez urlencode() avant de créer l'URL de l'hyperlien, et utilisez urldecode() pour obtenir la chaîne d'origine.

0
+0

En PHP, c'est urlencode() et urldecode(). Notez également que si vous utilisez $ _GET, vous ne devriez pas utiliser url_decode(). Le superglobal $ _GET est déjà décodé et l'utilisation de url_decode() sur $ _GET peut entraîner des résultats incorrects. – Trott

0

solution la plus simple et plus rapide étant donné ce que vous avez déjà est probablement changer ceci:

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

à quelque chose comme ceci:

<a href="export_csv.php?csv=urlencode($csv)">Export to CSV</a> 
Questions connexes