Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parametry w linkach a Walidacja
Forum PHP.pl > Forum > Przedszkole
ddzawias
Witam!

Mam wiele linków z parametrami (...?costam=costam), wybieranych dymamicznie z bazy.
Walidator się do nich przyczepia. Czy wie ktoś co na to poradzić?

Z góry dziękuję za pomoc.
dantes
Szkoda, że nie pokazałeś co wyświetla walidator ani jaki masz doctype dokumentu.

Zgaduję, że chodzi o W3C Validator i pewnie XHTML.

Co może być nie tak?

jeśli masz link index.php?modul=news&id=1 to z punktu widzenia paska adresu wszystko jest ok.
Jeśli masz jednak np.:
  1. <a href="index.php?modul=news&id=1">Link</a>

to validator wyrzuci błąd, bo (z tego co pamiętam) od XHTML 1.0 Strict znak & służy jako wskaźnik encji html, więc do generowania linku z wieloma zmiennymi get należałoby użyć:
  1. <a href="index.php?modul=news&amp;id=1">Link</a>

gdyż html'owe &amp; po "wydrukowaniu" jest równe &.

Oto wynik z validatora:
Line 1, Column 31: general entity "id" not defined and no default entity
<a href="index.php?modul=news&id=1">Link</a>

This is usually a cascading error caused by a an undefined entity reference or use of an unencoded ampersand (&) in an URL or body text. See the previous message for further details.

Line 1, Column 33: reference to entity "id" for which no system identifier could be generated
<a href="index.php?modul=news&id=1">Link</a>

This is usually a cascading error caused by a an undefined entity reference or use of an unencoded ampersand (&) in an URL or body text. See the previous message for further details.
ddzawias
tak zgadza sie to jest ten problem, Walidator podpowiedział że trzeba zamienić na &amp czy da się zamienić to jakoś dynamicznie w php ponieważ takich linków posiadam ponad tysiąc?
dantes
To zależy. Jeśli np. masz na swojej stronie jakiś system szablonów tak, że cała zawartość strony jest zawarta w jakiejś zmiennej php, to możesz zrobić bolesny trik ( winksmiley.jpg nie jest to najładniesza rzecz ani pewnie najbardziej wydajna).
  1. class Template
  2. {
  3. var $content;
  4. // some dummy template class here
  5. }
  6. $tpl= new Template('file_with_a_template.tpl');
  7. $tpl->content = str_replace('&','&',$tpl->content);
  8. echo $tpl->content;


Zadziała, o ile cała zawartość jest w zmiennych php i nie ma tam encji html (inaczej zamieniłby np. ó = ó na &oacute;)

Albo trzeba usiąść do kodu i stare dobre File & Replace.

edit:

albo jeśli linki generujesz dynamicznie, to tylko podmień tam gdzie je generujesz, np. w jakiejś pętli. Nie wiem, skąd je bierzesz, czy nie są np. wpisane na twardo w html'u, dlatego nic więcej podpowiedzieć nie mogę
ddzawias
są twardo wrzucone do bazy, jest ich multum.

// poradziłem sobie:

  1. $link = str_replace ("&","&", $link);


//Jednak to nie działa sad.gif
dantes
no, zastąpienie znaku & znakiem & nie przyniesie za dużych efektów. A czemu nie zamieniać & na &_amp; ?

edit:
sorry, mój błąd. nie wiem, czy to skrypt forum podmienił mi & na &, ale w str_replace powinno być:
w swoim kodzie usuń podkreślnik ( _ ) między & a amp; dodałem go, by przeglądarka nie zrobiła tego, o czym właśnie piszemy, czyli nie zamieniła encji na sam znak &.
$link = str_replace('&','&_amp;',$link);
darko
A nie lepiej zrobić raz a dobrze, a nie zamieniać za każdym razem? Mam na myśli replace na odpowiednich rekordach we właściwych kolumnach w bazie danych.
dantes
@darko - tak, brzytwa Ockhama się kłania winksmiley.jpg
ddzawias
mi też zamieniła przeglądarka w poście, str_replace nie działało przez literówke gdzie indziej, teraz jest elegancko.
Dziękuje za pomoc!
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.