2010-10-29 6 views
2

J'utilise strip_tags en PHP et après avoir traité la chaîne, la chaîne maintenant contient pas non plus \ n de ..balises strip PHP supprimant également n

Est-ce standard avec strip_tags?

+4

Retire-t-il les véritables \ n's ou seulement les retours à la ligne affichés? – NikiC

+1

Pouvez-vous poster le code que vous utilisez? Je viens de tester avec PHP 5.3.x et il ne se déshabille pas pour moi. –

Répondre

-2

Le but de stripcslashes est d'enlever \ n \ r etc comme indiqué ici.

http://www.php.net/manual/en/function.stripcslashes.php

Y at-il d'autre dans votre code que vous pouvez fournir?

Un test avec un simple:

$str = "This is a test \n \n \n \n where are you going?"; 

echo strip_tags($str); 

// still will print out the first sentence followed by four lines then the second sentence 
+1

Qu'est-ce que stripcslashes a à voir avec la question? – NikiC

3

strip_tags ne doit pas supprimer \ n mais peut-être qu'il supprime <br>.

Essayez d'ajouter une liste de balises pour permettre:

strip_tags('Hello<br>World', '<br>'); 

ce shold permettent <br> balises de rester dans la chaîne.

9

Eh bien, est-ce si difficile à tester? :)

class StripTagsTest extends PHPUnit_Framework_TestCase { 
    public function testStripTagsShouldNotRemoveLF() { 
     $input = "Hello\n <b>World</b>\n"; 
     $actual = strip_tags($input); 
     $expected = "Hello\n World\n"; 
     $this->assertEquals($expected, $actual); 
    } 

    public function testStripTagsRemovesBRTagByDefault() { 
     $expected = "HelloWorld\n"; 
     $input = "Hello<br>World<br>\n"; 
     $actual = strip_tags($input); 
     $this->assertEquals($expected, $actual); 

     $input = "Hello</br>World</br>\n"; 
     $actual = strip_tags($input); 
     $this->assertEquals($expected, $actual); 
    } 

    public function testStripTagsCanPermitBRTags() { 
     $expected = "Hello<br>World<br>\n"; 
     $actual = strip_tags($expected, '<br>'); 
     $this->assertEquals($expected, $actual); 

     $expected = "Hello</br>World</br>\n"; 
     $actual = strip_tags($expected, '<br>'); 
     $this->assertEquals($expected, $actual); 
    } 
} 

Ce test va réussir. Le même résultat est en utilisant des guillemets simples. Donc, non, strip_tags ne supprime pas \ n.

EDIT: Comme d'autres personnes l'ont déjà signalé - strip_tags supprime probablement la balise <br> dans votre boîtier. De plus, la prochaine fois, si vous fournissez du code, vous obtiendrez votre réponse plus rapidement. Ajout de deux nouveaux tests :)

+5

pour répondre avec un test unitaire - c'est bien +1 – NikiC