Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
Wyszukiwarka

Wyszukiwarka

Aby odnaleźć interesujące Cię informacje wpisz poniżej szukane frazy:
Logowanie

Logowanie

Zaloguj się aby zobaczyć swój profil:

XHTML i problem z ampersendem

Problem ten pojawia się zazwyczaj gdy stronę wykorzystującą sesje próbujemy poddać testowi na poprawność kodu XHTML ( http://validator.w3.org).

Ponieważ walidator nie akceptuje cookies to automatycznie do adresu doklejany jest identyfikator sesji, np.

index.php?go=1&PHPSESSID=474d2aa02a8431ca59aa96f39917b806

Jednakże wtedy validator zgłasza problem, ponieważ & (ampersend) to znak specjalny, który powinien być zawsze zakończony średnikiem. Prawidłowo zapisany ampersend powinien wyglądać tak : &. Oczywiście problem ten dotyczy nie tylko sesji (chociaż jest to przypadek specyficzny), ale wszystkich adresów z niepoprawnie zapisanym znakiem &. Za ustawienie separatora dla argumentów w wyjściowym adresie URL odpowiada zmienna konfiguracyjna arg_separator.output, domyślnie ustawiona na &. Jak się zapewne już domyślacie należy zmienić ją na &.Jednakże trochę inaczej sprawa ma się arg_separator.input, które odpowiada za parsowanie URLa w drugą stronę. Jej wartością nie jest bowiem pojedyńczy separator do odzielania argumentów w URLu, lecz lista separatorów. Ustawienie & spowoduje, że separatorami będą litery a, m, p oraz & i ;, a nie sam ampersend, tak jakbyśmy tego chcieli. Aby temu zaradzić arg_separator.input należy ustawić na ;&.Warto zwrócić uwagę na fakt, że w przeciwieństwie do arg_separator.output, arg_separator.input nie może być ustawione wewnątrz pliku, tak więc najlepiej obie wartości (dla większej przejrzystości) ustawić albo w php.ini albo w .htaccess.Przykład z wpisami w .htaccess :

php_value arg_separator.input ";&"
php_value arg_separator.output "&"

Przykład z wpisami w php.ini :

arg_separator.input = ";&"
arg_separator.output = "&"
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie uzytkowników: (6)
re: zamiana na &
Sobota 25 Marzec 2006 10:49:53 am - snipe

Ja rozwiazuje ten problem w inny sposob. Jestem przyzwyczajony do pisania "?" :P

function change_amp($buffer)
{
return (str_replace("?", "&", $buffer));
}

ob_start("change_amp");
echo '????????????????';
ob_end_flush();

problemy rozwiązujemy na forum
Wtorek 24 Styczeń 2006 11:27:13 am - sopel

emo9, zwróć się proszę z dokladnym opisem twojego problemu na forum.

problem
Wtorek 24 Styczeń 2006 12:49:17 am - emo9 <emilkarolak_at_googlemail.com>

Zrobiłem to tym sposobem z .htaccess i teraz w w3c mam coś takiego: character "&" not allowed in attribute specification list .

re: Ten sam sposób :P
Wtorek 17 Styczeń 2006 2:15:19 pm - camel

No właśnie daltego o tym napisałem, że nie każdy (np. ja) ma dostęp do php.ini...

Ten sam sposób :P
Wtorek 17 Styczeń 2006 9:54:55 am - mike_mech

~camel to co podałeś to niemalże ten sam sposób. Bo kwestia polega tylko na ustawieniu pewnych dyrektyw. Ty ustawiasz tylko na czas wykonania danego skryptu. Jest to wyjście idealne dla osób, które nie mają dostępu do pliku php.inni a jednocześnie mogą kożystać z ini_set(). Rozwiązanie proponowane przez ~sopel jest uniwersalne i działa dla wszystkich skryptów uruchamianych "na" danej konfiguracji PHP

Inny sposób
Poniedziałek 16 Styczeń 2006 11:10:42 am - camel

Niedawno pisałem o tym na forum.. Ja zrobiłem to tak:
W pliku php "ini_set('arg_separator.output', "&amp;");" i wszystko działa :)

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System