Witam
Czy to prawda ze teraz zaleca uzywac sie w php, itp "&" zamiast & ? np co=news&kat=1 ?
Ymm. Jak dobrze pamiętam , jak i w javascript i php uzywało się tylko &, ponieważ nie łapało & (kiedyś coś robiłem, i musiałem zamienic & na & , poniewaz nie dochodzily dane metoda get) . W xhtmlu jest to wymagane - według tidyhtml
czyli & tylko w xhtml ?
W końcu znak & służy do zapisywania encji, zatem żeby się pojawił sam & musi być jakoś oznaczony.
to jak wkoncu? & takze w php? czy tylko xhtml?
& i nie mówcie, że gdzieśtam nie działało - trzeba było raczej poprawnie skonfigurować środowisko pracy. Skoro w "zwykłym" HTML używasz non-breaking space ( ) to, żeby wyświetlić znaczek & również należy trzymać się przyjętej konwencji i wpisać &
Może Ci się przydać tablica znaków specjalnych.
ps. w php też będzie działało, bo byłoby nieroztropnie używać na stronie & w linkach (GET), które następnie nie chciałyby być poprawnie przetworzone po stronie serwera.
Ja trzymam się manuala:
Np:
http://us3.php.net/parse_str
Wklep :
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str, $output);
print_r($output);
?>
A wyjdzie ci:
Array ( [first] => value [amp;arr] => Array ( [0] => foo bar [1] => baz ) ) //skąd sie pojawiło $output['amp;arr'] ??? . Musiałbyś najpierw $str dac przez funkcje html_entity_decode
& to znak specjalny w HTML!
A po 2 to w PHP w zmiennej np $_SERVER['QUERY_STRING'] nie dostajesz & lecz &
Nie warto używać & ponieważ więcej pracy, ale nikt ci tego nie zakazuje.
Sprawą przeglądarki jest to, aby pozamieniać encje (szczególnie &) na odpowiadające im znaki PRZED wysłaniem żądania. Wtedy mimo że na stronie masz & to w linku masz ładnie &, a to ten link jest obrabiany przez serwer http.
Nie warto używać & ponieważ więcej pracy, ale nikt ci tego nie zakazuje.
Więcej pracy? Pisanie w widoku w linkach & zamiast & ? Przecież to raptem dodatkowe 4 znaki.
bordeux napisał(a)
Ja trzymam się manuala:
Np:
http://us3.php.net/parse_str
Co ma opis funkcji parse_str do ampersandów? W PHP znak "&" używamy do operacji logicznych i referencji, a w HTML do budowania encji. Zgodnie z tym co napisał nav, to przeglądarka odpowiedzialna jest za odkodowanie danych, więc nie wiem skąd Ci się nagle wzięło
$str = "first=value&arr[]=foo+bar&arr[]=baz";
w PHP w zmiennej np $_SERVER['QUERY_STRING'] nie dostajesz & lecz &
Więc $_SERVER['QUERY_STRING'] da
$str = "first=value&arr[]=foo+bar&arr[]=baz";
I nie będzie żadnego problemu.
Nie warto używać &
Możesz również zrezygnować z encji > i < na rzecz znaków "<" i ">", ale kod napisany w taki sposób nie będzie ani czytelny, ani poprawny.
Już wybiegamy za TEMAT! JEMU CHODZI CZY WARTO UŻYWAĆ & w PHP!
Zróbcie test!
$homepage = file_get_contents('http://twojserwer/test.php?taa=12asd&tsaa=12s');
echo $homepage;
a do pliku test.php wklepcie:
print_r($_GET);
Wyjdzie wam - Array ( [taa] => 12asd [amp;tsaa] => 12s )
Co ma opis funkcji parse_str do ampersandów?
Napisałem np. (naprzykład) do funcji parse_str, gdyż ona nie nie interpretuje & jako & . Skąd tam się akurat wzięło to & to nie moja sprawa. Miałem udowodnić że & to coś innego w php niż samo &
Czyli ogólnie mowiac. Jak chcesz pobierać treść strony za pomocą PHP (tak jak powyzej) to nie używaj & . & po prostu uzywa sie w html (treści uzyskanej przez m.in. php) np. w linkach
No, to jest specyficzny przypadek, żeby & nie używać. & używa się w HTML. Oraz XML, co za tym idzie także XHTML. Koniec.
A że PHP akurat w przypadku fopen() tego nie interpretuje (tj. nie zamienia z encji na właściwy znak) to jest tylko i wyłącznie wina PHP - nawet nie wiem czy tego jako bug nie zgłosić tak w gruncie rzeczy.
Ktos napisał(a)
A że PHP akurat w przypadku fopen() tego nie interpretuje (tj. nie zamienia z encji na właściwy znak) to jest tylko i wyłącznie wina PHP - nawet nie wiem czy tego jako bug nie zgłosić tak w gruncie rzeczy.
nie, poniewaz interpretacja encji jest sprawa przegladarki i standardow *html, a nie php. Nie ma tu specjalnej sprzeczności. tak samo byłoby w c pascalu czy javie, dostajemy linka ze strony z '&', ale wyslac zapytanie trzeba z '&', zamienić & na & nalezy samemu, roznież z takiej przyczyny:
> mkdir http: ;
> touch 'http://bbb.php&cos=ble'
> ls -l 'http://bbb.php&cos=ble'
-rw-r--r-- 1 flabra users 0 2009-03-16 11:59 http://bbb.php&cos=ble