urlencode

urlencode($string)

Koduje tekst do użycia w adresie URL jako wartość parametru za znakiem zapytania. Wszystkie znaki poza literami a–z, cyframi i znakami „-”, „_” i „.” zamienia na sekwencję %XX, a spację na plus.

Parametry

  • $string – wartość, która ma trafić do adresu.

Przykłady

echo urlencode("Żurek & chleb"); // %C5%BBurek+%26+chleb
echo "/szukaj/?q=" . urlencode("C++ i C#"); // /szukaj/?q=C%2B%2B+i+C%23
// kodować wartość, nie cały adres
echo urlencode("https://www.garth.cz/?a=1"); // https%3A%2F%2Fwww.garth.cz%2F%3Fa%3D1
// cały adres jako wartość parametru (powrót po zalogowaniu)
echo "/zaloguj/?powrot=" . urlencode("/artykul/?id=5&strona=2"); // /zaloguj/?powrot=%2Fartykul%2F%3Fid%3D5%26strona%3D2
// http_build_query składa kilka parametrów wygodniej
echo http_build_query(array("q" => "Żurek & chleb", "strona" => 2)); // q=%C5%BBurek+%26+chleb&strona=2
// link wypisany w HTML potrzebuje jeszcze htmlspecialchars
echo htmlspecialchars("/?a=" . urlencode("x y") . "&b=" . urlencode("1&2")); // /?a=x+y&b=1%262
// różnica względem rawurlencode: spacja i tylda
echo urlencode("a b~"); // a+b%7E
echo rawurlencode("a b~"); // a%20b~

Na co uważać

  • Koduj poszczególne wartości parametrów, nie cały adres. Przy kodowaniu całego adresu zakodowałyby się też dwukropek, ukośniki i znak zapytania, a link przestałby działać.
  • Spację koduje jako plus. To dotyczy tylko części adresu za znakiem zapytania. W ścieżce (nazwa pliku, folder) plus znaczy naprawdę plus – tam należy rawurlencode().
  • Nie chroni wyjścia na stronie. Adres wstawiany do HTML zamień jeszcze przez htmlspecialchars(), inaczej separator & między parametrami nie będzie poprawnie zapisany.
  • Wartości w $_GET PHP już zdekodowało. Przy budowaniu nowego adresu zakoduj je znowu, raz.
  • Koduje bajt po bajcie. Polska litera, na przykład ż, ma w UTF-8 dwa bajty i dlatego zmienia się w dwie grupy %XX.

Powiązane funkcje:
urldecode()
rawurlencode()
htmlspecialchars()