2011-03-22 2 views
0

La solution est sans doute facile, mais je ne peux pas comprendre pourquoi il ne fonctionne pas:ne peux pas comprendre pourquoi « n » est pas supprimé

Je soumets un de l'utilisation de la fiche de formulaire jQuery -in, puis exécutez le travers:

str_replace(array("\r", "\n\t"), "", $_POST['mytext'])

en regardant l'en-tête HTTP, "\ n" ne sont pas ajoutés partout. Cependant, quand je puis imprimez $ _POST [ « mytext »] de PHP (uniquement pour des fins de test), Firebug montre tout « \ n » sur la place:

<html>\n <head>\n  <title></title>\n </head>\n <body>\n  <h3>\n   We are..... 

Ce qui est intéressant est que si je sélectionne cette sortie, l'assigner manuellement à un var, puis exécuter str_replace dessus, tous les caractères \ n disparaissent. Pourquoi pas avec la variable $ _POST?

Aidez-nous s'il vous plaît. Aller fou avec ce qui semble être une tâche triviale.

P.S. J'ai une règle de réécriture .htaccess, mais douter salit avec quoi que ce soit:

RewriteRule ^/update_text/? my.php?action=update_text [QSA] 

QSA est nécessaire pour transmettre d'autres _GET $ les données de mes JS.


Problème "sorte de solution". J'ai remplacé $ _POST par $ _REQUEST et tout est dandy maintenant. Je ne comprends toujours pas pourquoi $ _POST se comporterait de cette façon.

+0

Je ne comprends pas le problème. En PHP, vous remplacez \ r par \ n et un caractère de tabulation (\ t). Ensuite, dans le texte généré, vous voyez \ n suivi d'un caractère de tabulation. N'est-ce pas exactement ce que vous avez demandé au code de faire? Si vous ne voyez pas \ n dans l'en-tête (je suppose que vous entendez par là les données envoyées au serveur), vous n'avez peut-être que \ r caractères dans les données envoyées, et \ n? – nitro2k01

+0

Oh, attends, j'ai mal lu le code ... – nitro2k01

+0

rappelez-vous - \ n ne signifie rien au HTML. Pour afficher correctement dans une page, vous souhaitez '
' à la place. –

Répondre

0

Avez-vous essayé d'utiliser la constante de fin de ligne PHP? PHP_EOL

+0

Eh oui, no go preg_replace également essayé ("% \ n% ") mais pas de chance – MarkL

-1

Je pense que php échappe automatiquement aux données publiées - donc pour l'obtenir non-échappé, utilisez stripslashes ($ _ POST ['mytext']). Ce comportement peut être modifié dans les paramètres php.ini pour les citations magiques, mais c'est une bonne idée de le garder par mesure de sécurité contre les attaques par injection.

+1

' magic_quotes' est une sécurité médiocre pour se protéger contre l'injection de [sql] C'est pourquoi il est déprécié à partir de 5.3.0 (http://php.net/magic_quotes). C'est parce que différents objets ont besoin d'être échappés de différentes façons.Tout 'magic_quotes' a fait échapper les' addslashes' afaik, qui ne couvre pas tous les différents exploits pour toutes les différentes bases de données, etc. -1 pour de mauvaises informations sur la sécurité (désolé) Il est préférable d'éteindre 'magic_quotes' et de gérer les échappements avec les outils appropriés fournis par la base de données ou le besoin de l'application –

+0

Je l'ai essayé mais comme un résultat je me retrouve avec beaucoup de "n" caractères. – MarkL

+0

On m'a dit! Merci d'avoir éclairci ça. –

2

votre ne pas remplacer « \ n » et vous pourriez être en cours d'exécution dans un problème « \ r \ n »

// Order of replacement 
$str  = "Line 1\nLine 2\rLine 3\r\nLine 4\n"; 
$order = array("\r\n", "\n", "\r"); 
    str_replace($order, "", $str); 
+0

@MarkL aussi ce qui se passe quand vous renvoyez les résultats du str_replace y at-il de nouvelles lignes – mcgrailm

+0

Oui, ma seule suggestion est d'assigner les données 'str_replace' à une valeur ou' echo' it. Pas vraiment clair dans l'exemple de code ci-dessus. –

+0

essayé mais toujours pas aller. 'echo str_replace (array ("\ r \ n", "\ n", "\ r"), "", $ _POST [' text '])' montre le \ n. même si j'insère ceci dans MySQL, le caractère de nouvelle ligne apparaît là. – MarkL

Questions connexes