Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> htmlentities, problem z zastosowaniem w pdo
DonJeday
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Witam,

Mam problem, ponieważ chcę zastosować htmlentities do wyświetlania wszystkich pól wyświetlanych za pomocą tablic asocjacyjnych w pdo do tego używam smartów. Chcę by było to odrazu stosowane.



Mój kod:

  1. <?php
  2.  
  3. $row_html = htmlentities($row);
  4. $smarty->assign('user_data', $row_html);
  5.  
  6. ?>




Jednak zwraca to błąd. W czym to tkwi?

Treść błędu:

Kod
Warning: htmlentities() expects parameter 1 to be string, array given in ...


Ten post edytował DonJeday 19.04.2009, 10:41:49
Go to the top of the page
+Quote Post
Apocalyptiq
post
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


htmlentities przyjmuje w parametrze ciąg znaków, a ty dałeś mu tablice (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. $row_html = array();
  3. foreach($row as $rec) $row_html[]=htmlentities($rec);
  4. $smarty->assign('user_data', $row_html);
  5. ?>


Ten post edytował Apocalyptiq 19.04.2009, 11:04:29
Go to the top of the page
+Quote Post
DonJeday
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Cytat(Apocalyptiq @ 19.04.2009, 12:02:07 ) *
htmlentities przyjmuje w parametrze ciąg znaków, a ty dałeś mu tablice (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. $row_html = array();
  3. foreach($row as $rec) $row_html[]=htmlentities($rec);
  4. $smarty->assign('user_data', $row_html);
  5. ?>

No teraz błędu nie wywala, ale też nic nie wyświetla (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
pyro
post
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Zauważyłeś zupełnie pustą tablice? Masz to w kodzie który podał kolega wyżej...
Go to the top of the page
+Quote Post
kantek
post
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 15
Dołączył: 2.04.2009
Skąd: koszalin

Ostrzeżenie: (0%)
-----


Chyba nie - $row_html jest pusta, a w $row chyba coś tam ma (a to jej elementy w pętli przepisuje do tej pustej).

dla pewności sprawdź sobie czy coś masz w tej tablicy $row (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !

Pozdrawiam

Ten post edytował kantek 19.04.2009, 11:27:51
Go to the top of the page
+Quote Post
DonJeday
post
Post #6





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


jak nie używam tej funkcji wszystko działa wiec tablica $row nie jest pusta (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
bim2
post
Post #7





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Polecę funkcję array_map zamiast robienia foreacha. Nie wiem jak zmienia prędkość ale chyba czytelniejsze/wygodniejsze.
Go to the top of the page
+Quote Post
DonJeday
post
Post #8





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Ehh nie kumam tego array_map... Jest jakiś normalniejszy sposób żeby zastosować htmlentities

Dodam, że tablica $row nie jest pusta bez htmlentities wszystko śmiga a jak dodam to albo błąd lub nic nie wyświetla
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. $row_html[]=htmlentities($rec);
  3. ?>

$row_html ma byc tablicą?
Go to the top of the page
+Quote Post
megawebmaster
post
Post #10





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

Ostrzeżenie: (0%)
-----


Tablica row jest tablicą asocjacyjną? Jak tak to skorzystaj z czegoś takiego:
  1. <?php
  2. $row_html = array();
  3. foreach($row as $key => $value) $row_html[$key]=htmlentities($value);
  4. $smarty->assign('user_data', $row_html);
  5. ?>

Albo z array_map:
  1. <?php
  2. $row_html = array();
  3. $row_html = array_map("htmlentities",$row);
  4. $smarty->assign('user_data', $row_html);
  5. ?>
Go to the top of the page
+Quote Post
DonJeday
post
Post #11





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Cytat(megawebmaster @ 20.04.2009, 21:33:00 ) *
Tablica row jest tablicą asocjacyjną? Jak tak to skorzystaj z czegoś takiego:
  1. <?php
  2. $row_html = array();
  3. foreach($row as $key => $value) $row_html[$key]=htmlentities($value);
  4. $smarty->assign('user_data', $row_html);
  5. ?>



Elegancko działa

Ten post edytował DonJeday 20.04.2009, 21:19:24
Go to the top of the page
+Quote Post
megawebmaster
post
Post #12





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

Ostrzeżenie: (0%)
-----


Musi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Oczywiście zadziała również z tablicą numerowaną (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
DonJeday
post
Post #13





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


A jak ustawić kodowanie utf-8 dla array_map? bo dla foreach robię to tak:
  1. <?php
  2. foreach($row as $key => $value) $row_html[$key]=htmlentities($value, ENT_QUOTES, 'UTF-8');
  3. ?>


A jak powinno to wyglądać dla array_map bo w manualu nie mogę znaleść
Go to the top of the page
+Quote Post
megawebmaster
post
Post #14





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

Ostrzeżenie: (0%)
-----


  1. <?php
  2. for($i = 0, $endI = count($row); $i<$endI; $i++){
  3.  $quotes[] = ENT_QUOTES;
  4.  $charset[] = 'UTF-8';
  5. }
  6. $row_html = array_map("htmlentities",$row,$quotes,$charset);
  7. ?>


Nie wiem jak to dokładnie zadziała jakbyś podał zamiast $quotes po prostu ENT_QUOTES, a zamiast $charset 'UTF-8' - w manualu jest tylko o zachowaniu z tablicami.

EDIT: Jest jeszcze opcja taka:
  1. <?php
  2. $row_html = array_map("htmlentities",$row, array_fill(0, count($row), ENT_QUOTES)), array_fill(0, count($row), 'UTF-8')));
  3. ?>


Znalezione na manualu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
http://pl.php.net/manual/pl/function.array-map.php

Ten post edytował megawebmaster 21.04.2009, 16:30:38
Go to the top of the page
+Quote Post
DonJeday
post
Post #15





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Niestety nie działa to kodowanie. Oto kod:
  1. <?php
  2.  
  3. while ($row_collection = $query -> fetch(PDO::FETCH_ASSOC)) {
  4.   $collection[] = array_map('htmlentities', $row_collection);
  5. }
  6. $smarty->assign('collection', $collection);
  7.  
  8. ?>


Wszystko co pobierane jest za pomocą tej pętli jest nieodkodowane, pomimo iż w zapytaniu PDO mam komendę "SET NAMES utf8"
Go to the top of the page
+Quote Post
Apocalyptiq
post
Post #16





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Może w bazie danych jest coś nie tak z tym? Kodowanie złe, albo popsute polskie znaki? Jak jest w utf-8, polskie znaki w bazie powinny być dwuznakowe, zwykle duże A jakieś i znak jakiś (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
DonJeday
post
Post #17





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


W bazie jest wszystko ok, bo polskie znaki są tego typu: Ĺ�


Wykąbinowałem coś takiego, tylko nie wiem co jest nie tak:
  1. <?php
  2. while ($row_collection = $query -> fetch(PDO::FETCH_ASSOC)) {
  3.  $a[] = array($row_collection, ENT_QUOTES, 'UTF-8');
  4.  $collection[] = array_map('htmlentities', $a);
  5. }
  6. ?>


Błąd:
Kod
Warning: htmlentities() expects parameter 1 to be string, array given in ...


Ten post edytował DonJeday 22.04.2009, 17:38:21
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. $a[] = array($row_collection, ENT_QUOTES, 'UTF-8');
  3. ?>

Po co te nawiasy kwadratowe? Przecież błąd wyraźnie sugeruje, w czym błąd.
Go to the top of the page
+Quote Post
megawebmaster
post
Post #19





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

Ostrzeżenie: (0%)
-----


I tak to będzie błąd - do array_map, jako kolejne tablice podaje się kolejne parametry funkcji. Ja podawałem jak zrobić z UTF-8, ale widać, coś nie pasowało :]
  1. <?php
  2. $row_html = array_map("htmlentities", $row, array_fill(0, count($row), ENT_QUOTES), array_fill(0, count($row), 'UTF-8'));
  3. ?>

Problem był w podwójnych nawiasach za przy array_fill - nie zauważyłem tego, pisałem z palca (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) U mnie to działa - specjalnie sprawdziłem.
Go to the top of the page
+Quote Post
DonJeday
post
Post #20





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


No dobra błędu nie ma ale też nic nie wyświetla (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
  1. <?php
  2.  
  3. while ($row_collection = $query -> fetch(PDO::FETCH_ASSOC)) {
  4.    $collection[] = array_map("htmlentities", $row_collection, array_fill(0, count($row_collection), ENT_QUOTES), array_fill(0, count($row_collection), 'UTF-8'));
  5. }    
  6. $smarty->assign('collection', $collection);
  7.  
  8. ?>


Nie wiem co jest czemu nie wyświetla. Po prostu tak jak by niczego nie pobierało.

Ten post edytował DonJeday 22.04.2009, 19:22:48
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 13:11