PHP: przekonwertować spacje w łańcuchu na% 20?

84

Jak mogę zamienić spacje w ciągu na %20?

Oto moja próba:

$str = "What happens here?";
echo urlencode($str);

Wynik to "What+happens+here%3F", więc spacje nie są reprezentowane jako %20.

Co ja robię źle?

matowe
źródło

Odpowiedzi:

200

rawurlencodeZamiast tego użyj funkcji.

Matthew Flaschen
źródło
1
Uważaj, jeśli użyjesz tego dla adresu URL (a nie jego części zapytania), przekonwertowany ukośnik spowoduje, że adres URL nie będzie działał. Więc jeśli potrzebujesz tylko zadbać o spacje (może dla tego adresu URL), sugeruję str_replace.
Lukáš Řádek
26

Znak plus to historyczne kodowanie znaku spacji w parametrach adresu URL, zgodnie z opisem w pomocy do urlencode()funkcji.

Ta sama strona zawiera odpowiedź, której potrzebujesz - użyj rawurlencode()zamiast tego, aby uzyskać kodowanie zgodne z RFC 3986 .

Alnitak
źródło
20

Uważam, że jeśli potrzebujesz skorzystać z tego %20wariantu, możesz użyć rawurlencode().

David mówi, że przywróć Monikę
źródło