2010-12-07 24 views
0

Je suis dans une situation où j'ai besoin d'exploser une chaîne qui contient une entrée utilisateur mais un délimiteur personnalisé. Je veux m'assurer que l'utilisateur ne peut pas entrer ce délimiteur dans sa saisie, afin de ne pas faire exploser la chaîne au mauvais endroit.Empêcher l'utilisateur d'exploser la chaîne dans PHP

Quelle est la meilleure façon de faire cela? Y at-il un certain type de filtre que je devrais exécuter sur les données de l'utilisateur en supprimant les occurrences du délimiteur? Je pense qu'il y aurait une meilleure réponse que de créer un délimiteur unique.

Merci.

+1

Cette question est source de confusion. S'ils ne peuvent pas entrer ce délimiteur dans la chaîne, comment obtient-il dans la chaîne en premier lieu? Et si vous placez le délimiteur sur le serveur, pourquoi ne pas simplement référencer la position de la chaîne par son index au lieu d'utiliser un délimiteur? –

+0

Non qu'ils ne puissent pas entrer le caractère de délimitation, mais je voudrais qu'il ne soit pas interprété comme un délimiteur côté serveur. –

+1

Si vous obtenez leur chaîne avant qu'elle ne soit concaténée avec votre délimiteur magique, il suffit de remplacer toutes les occurrences du délimiteur par une chaîne improbable (comme indiqué ci-dessous, par exemple, '--- DELIM ---'). Si vous n'avez pas l'occasion de le faire, le problème est insoluble. –

Répondre

5

Ceci est un problème ancien, alors résolvez-le comme il a déjà été résolu.

Dans les fichiers CSV, la virgule est le délimiteur, mais les entrées peuvent contenir des virgules. Comment? Entourez les entrées avec des guillemets. Que faire si l'entrée contient des citations? Doublez les guillemets sur l'entrée utilisateur afin que vous sachiez qu'il s'agit de données et non de délimiteurs.

Field One,Field Two,"Field, Three","Field ""Four""" 

PHP a des fonctions pour la création et la lecture de format CSV avec délimiteurs défini sur mesure, de sorte que vous n'avez même pas écrire le code.

+0

CSV, JSON, XML, tableaux natifs, tableaux sérialisés ... autant d'options. – deceze

+0

pardonnez-moi, mais je veux juste m'assurer que je comprends cela d'accord - pouvez-vous fournir un peu plus de code de fonctionnement dans votre exemple? –

+0

http://www.php.net/manual/en/function.str-getcsv.php –

0

Si vous n'avez pas str-getcsv dans votre environnement, alors selon les commentaires dans votre question initiale.

Supposons que votre delimiter est le symbole pipe

$clientString = 'somestring|fobar'; 
$clientString = str_replace('|', '{{{somecrazydelimiter}}}', $clientString); 

Vous pouvez l'inverse plus tard, la situation après l'explosion et remplacez votre delimiter temporaire avec l'original:

$clientString = str_replace('{{{somecrazydelimiter}}}', '|', $clientString);