2010-07-09 4 views
2

HI les gars,Entrée html propre dans Codeigniter

Je construis une application en utilisant CodeIgniter et j'ai eu un problème. J'ai un formulaire avec un textarea dans lequel l'utilisateur met son texte en utilisant un simple éditeur alimenté par jwysiwyg.jquery. Le problème est qu'il est nécessaire de nettoyer cette entrée de code poubelle (lien celui qui vient avec le collage directement à partir de Word).

Le formulaire est validé avec la bibliothèque form_validation de CodeIgniter, avec cette règle:

array(
'field' => 'job[description]', 
'label' => 'Description', 
'rules' => 'trim|required|callback_clean_html' 
), 

J'ai une méthode de clean_html qui fait simplement:

return strip_tags($text,'<a><p><br><strong><em><h3><h4><h5><ul><ol><li>'); 

Le problème est que ce simplement ignoré et le texte original est inséré dans la base de données. La méthode fonctionne (j'ai testé). Je suppose que c'est parce qu'un callback devrait retourner TRUE ou FALSE, mais alors xss_clean ne renvoie pas de BOOL. La documentation n'est pas beaucoup d'aide.

Avez-vous des questions?

Merci d'avance.

+0

Je suggère de ne pas utiliser le formulaire_validation.php dans la bibliothèque, mais plutôt d'écrire chacun individuellement – ggfan

Répondre

1

Je pense que les callbacks form_validation ont besoin de renvoyer un booléen. Je trouve que form_validation est plus utile lorsque vous avez besoin d'afficher un message d'erreur à un utilisateur habituellement pour soumettre à nouveau le formulaire. Bien que les fonctions de préparation puissent être pratiques, elles n'ont pas besoin d'être là pour être validées. Pourquoi ne pas passer la chaîne soumise via la fonction strip_tags après que le formulaire a été soumis, mais avant de l'envoyer à votre base de données? Xss_clean et d'autres fonctions de validation de CI renvoient des valeurs non booléennes.

+0

Je vais le faire, je pensais juste que ce serait bien de faire toutes les données de préparation en un seul endroit, eh bien. Merci pour la réponse. –

0

Avez-vous essayé de supprimer callback_ dans la règle? Vous pouvez faire des fonctions PHP régulières comme trim alors cela devrait fonctionner.

0

Quelque chose aI faire toujours juste pour être le double de sécurité, après avoir défini les règles pour l'entrée que je les dirige aussi à travers cette

`$string = filter_var($string, FILTER_SANITIZE_STRING);` 

qui supprime le html

moi aussi j'ai couru dans des situations dernièrement où l'entrée ignore totalement les règles qui ont été définies.

0

Je viens de tester la fonction de rappel suivante dans la version CI 1.7.2:

function test_string_change($str) 
{ 
    return "$str **"; 
} 

La chaîne a été modifiée à l'aide avec succès callback_test_string_change. Je sais qu'il y avait quelques problèmes avec les fonctions de rappel dans 1.7.0, utilisez-vous la dernière version?

0

D'après ce que vous avez posté, cela devrait fonctionner. Le préfixe "callback_" et le retour sont corrects. Les méthodes de validation peuvent retourner des non-booléens, ce qui remplacera la valeur. Vérifiez la documentation de form_validation, elle le dit explicitement. Donc, votre problème doit être à un endroit du code que vous n'avez pas envoyé.

Questions connexes