Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]HTML Purifier, problem z cudzysłowami
Forum PHP.pl > Forum > Przedszkole
Walian
Wklepuję kod HTML do textarea:
  1. Test HTML:
  2.  
  3. <div style="font-family: Comic Sans Ms; color: #FF0000">Czerwony tekst innej czcionki</div>
  4.  
  5. <table cellspacing="0" cellpadding="0" style="width: 100px; border: 1px solid black">
  6. <tr>
  7. <td>
  8. cos
  9. </td>
  10. </tr>
  11.  
  12. <a href="#" title="Jakiś link">Jakiś link</a>


Otrzymuję:
  1. Test HTML:
  2.  
  3. <div>Czerwony tekst innej czcionki</div>
  4.  
  5.  
  6. cos
  7.  
  8. <a href="%5C" title=""Jakiś">Jakiś link</a>


Nie wiem czemu zmienia mi hash oraz ten cudzysłów.
magic_quotes_gpc jest wyłączone w .htaccess.

A teraz jak korzystam z HTML Purifier:
  1. require_once('includes/library/HTMLPurifier.auto.php');
  2. $config = HTMLPurifier_Config::createDefault();
  3. $config->set('Core.Encoding', 'UTF-8');
  4. $config->set('HTML.Doctype', 'HTML 4.01 Strict');
  5. $config->set('HTML.AllowedElements', 'a,strong,span,div');
  6. $config->set('HTML.AllowedAttributes', 'a.href,a.title,span.style,div.style');
  7. $purifier = new HTMLPurifier($config);
  8. $desc = $purifier->purify($desc, $config);

Nie jestem pewien gdzie dać ten config (więc dałem w oba miejsca wstydnis.gif), na necie w wielu przykładach jest za każdym razem inaczej.
Mam najnowszą wersję.

Do czego służy opcja, oraz jej wartości:
  1. $config->set('HTML.TidyLevel', 'light');

?
Jakimi jeszcze opcjami powinienem się zainteresować?

Chcę również by działały najważniejsze tagi do formatowania tekstu, takie jak pogrubienie, czcionka (da się ograniczyć wielkość?), kolor, do tego jakieś ramki (tabele) itd. by można było robić takie bajery jak w aukcjach allegro, ale korzystając tylko z tych tagów, które są bezpieczne.
erix
Cytat
  1. $config->set('HTML.AllowedElements', 'a,strong,span,div');

I to jest podpowiedź-odpowiedź. winksmiley.jpg

Zerknij do swojego kodu, porównaj, jakie są elementy wspólne i wyciągnij wnioski.
Walian
Przyznaję z bólem, że nie wiem co zmienić smile.gif
Zerknąłem teraz tu: http://stackoverflow.com/questions/1320524...-in-symfony-1-2
i usunąłem to "Elements", nie wiem czy o to Ci chodziło.
W każdym razie sugerowałem się tym przykładem i nici z mojego kombinowania.
Problem jest zarówno z cudzysłowem jak i nie formatowaniem tekstu, diva.
Tabelę pomijam na razie, chodzi głównie o dopuszczenie tagów "style" i rozwiązanie problemu tego cudzysłowa.
erix
Ok, zobaczymy, czy Sokrates miał rację z uczeniem przez pytania. winksmiley.jpg

Co znaczy po angielsku allowed? Co za tagi masz na tej liście podane? Co wpisujesz do formularza, a co dostajesz? Jakie widzisz podobieństwo między tym, co wypluwa a między tym, co jest wpisane w pewną zmienną?
Walian
Cytat("erix")
Ok, zobaczymy, czy Sokrates miał rację z uczeniem przez pytania.

Ożesz Ty biggrin.gif

Cytat("erix")
Co znaczy po angielsku allowed?

blink.gif
Prosze Cie biggrin.gif

Cytat("erix")
Co za tagi masz na tej liście podane?

Te które mają być przepuszczane.

Cytat("erix")
Co wpisujesz do formularza(...)

Mega f... z... kod HTML biggrin.gif

Cytat("erix")
Jakie widzisz podobieństwo między tym, co wypluwa a między tym, co jest wpisane w pewną zmienną?

No więc w mordę jeża - cudzysłów...

Przed potraktowaniem zmiennej $desc HTML Purifierem potraktowałem ją stripslashes i all śmiga, z tymże ja nie mam magic_quotes włączonych więc czemu dane w POST są zaslashowane?
Poza tym pewnie nie o to Ci chodziło bo pisałeś o tym Allowed ;P
erix
Owszem, allowed. tongue.gif

Nie patrz teraz na konstrukcję, ale skup się nad czytaniem tej linijki jak zwykłego zdania. No i wyobraź sobie, że ta klasa, to pani Jadzia z portiernii. Każdy wchodzi z przepustką.

A skąd ona ma wiedzieć, które nazwiska puścić? winksmiley.jpg Chcesz dodać nowe, włącz myślenie.
Walian
Cytat("erix")
Nie patrz teraz na konstrukcję, ale skup się nad czytaniem tej linijki jak zwykłego zdania. No i wyobraź sobie, że ta klasa, to pani Jadzia z portiernii. Każdy wchodzi z przepustką.

Skąd Ty taki towar bierzesz? biggrin.gif

Cytat("erix")
A skąd ona ma wiedzieć, które nazwiska puścić? winksmiley.jpg Chcesz dodać nowe, włącz myślenie.

  1. $config->set('HTML.Allowed', 'a[href|title],span[style],div[style],table[style],td[style]');

tiredsmiley.gif?

Zrozumieć Cię człowieku to niezły wyczyn, nawet znajomy nie kuma Twoich wskazówek.
No ale dobra jedziemy dalej. Czekam na kolejny Twój post ;P
erix
Cytat
Skad Ty taki towar bierzesz?

Kupuję od Dilberta. biggrin.gif

Cytat
?

A ciężko sprawdzić? tongue.gif

Cytat
Zrozumieć Cię człowieku to niezły wyczyn, nawet znajomy nie kuma Twoich wskazówek.

Hmm, ale wszystko wskazuje na to, że któraś z tych dwóch opcji jest prawdopodobna:
  1. robisz mnie w konia tongue.gif
  2. Twoje alter-ego zaczyna łapać, a Ty nie jesteś tego świadom winksmiley.jpg
Walian
Cytat("erix")
robisz mnie w konia tongue.gif

Nie no gdzieżby. Nie śmiałbym winksmiley.jpg

Cytat("erix")
Twoje alter-ego zaczyna łapać, a Ty nie jesteś tego świadom winksmiley.jpg

Załapać to ja załapałem na początku tylko Ty zamieszałeś tongue.gif

Użyłem:
  1. $config->set('HTML.AllowedElements', 'a,strong,span,div');
  2. $config->set('HTML.AllowedAttributes', 'a.href,a.title,span.style,div.style');


a teraz:
Cytat
This is a convenience directive that rolls the functionality of %HTML.AllowedElements and %HTML.AllowedAttributes into one directive. Specify elements and attributes that are allowed using: element1[attr1|attr2],element2...


Więc moja wersja powinna być poprawna, right?
A Ty się przyczepiłeś tego Allowed dlatego taki zdziwiony jestem tongue.gif

A teraz uwaga. Będzie wyjazd z armaty winksmiley.jpg
Co powiesz, na to, że ten plik mi działa:
  1. require_once('includes/library/HTMLPurifier.auto.php');
  2. $config = HTMLPurifier_Config::createDefault();
  3. $config->set('Core.Encoding', 'UTF-8');
  4. $config->set('HTML.Doctype', 'HTML 4.01 Strict');
  5. $config->set('HTML.Allowed', 'a[href|title],span[style],div[style],table[style],td[style]');
  6. $purifier = new HTMLPurifier($config);
  7. $desc = '<a href="#" title="Jakiś link">Jakiś link</a>';
  8. $desc = $purifier->purify($desc, $config);
  9. echo $desc;


Natomiast w tym, w którym mam formularz nie działa bo w zmiennej, w której znajduje się ten kod html (mówię o tablicy POST) zamiast jednego cudzysłowa jest
Kod
\"

i chyba to powoduje błąd.
Albo ja coś namieszałem tam w pliku, albo serwer ma jakąś opcję która mi miesza z danymi POST.

"Ownisz" mi "musk" maaan...

Cytat("erix")
Twoje alter-ego zaczyna łapać, a Ty nie jesteś tego świadom winksmiley.jpg

To może się zaraz okazać true bo o tej godzinie myślenie mi się wyłącza, pozostają tylko suche if-y tongue.gif

Zrobiłem test, początek pliku, w którym jest błąd:
  1. if (!strcmp(@$_POST['submit'], 'Dodaj ogłoszenie'))
  2. {
  3. echo($_POST['desc']);
  4. exit();
  5. }


i wywala
  1. <a href=\"#\" title=\"Jakiś link\">Jakiś link</a>
erix
Cytat
Użyłem:

Nie do końca, bo wciąż tu tabelek nie było. tongue.gif Sam zamotałeś. winksmiley.jpg

Cytat
Albo ja coś namieszałem tam w pliku, albo serwer ma jakąś opcję która mi miesza z danymi POST.

Wiem, że w htaccess wyłączyłeś magic_quotes, ale jeśli serwer dopala interpreter podłączony przez FastCGI, to zmiany w htaccess są nic nie warte. Chociaż obiło mi się o uszy, że jest jakiś detektor, ale nie ma co na tym polegać. Zresztą, odpal phpinfo i sprawdź sam.

Cytat
i wywala

Chyba moja teoria zaczyna się potwierdzać. winksmiley.jpg

Cytat
"Ownisz" mi "musk" maaan...

Małe spięcie między neuronami jeszcze nikomu nie zaszkodziło. biggrin.gif
Walian
Kod
magic_quotes_gpc    Off    On
magic_quotes_runtime    Off    Off
magic_quotes_sybase    Off    Off

Druga kolumna to ofc "Master Value".
Lokalnie jest OK więc htaccess uznało.

Cytat("erix")
Chyba moja teoria zaczyna się potwierdzać. winksmiley.jpg

Chyba nie biggrin.gif

EDIT:
Hmm na necie wyczytałem, że na tym serwerze nie działa wyłączanie tego g. przez htaccess.
W takim razie phpinfo się myli...
erix
Cytat
że na tym serwerze nie działa wyłączanie tego g. przez htaccess.

vide: poprzedni post + http://pl.php.net/manual/en/security.magic...s.disabling.php
Walian
No wiem, wyłączyłem już to wczoraj w pliku php.ini smile.gif
Heh cały topic o zupełnie czym innym tongue.gif
Ciebie pewnie zmyliło to, że nie dopisałem tych tagów table i td, a mnie te Twoje Allowed tongue.gif
Ale i tak dzięki za chęci winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.