Это нормально - так и должно быть. $
- это специальный символ, который может иметь особое значение, если включен в URL. Поэтому всякий раз, когда вы отправляете значение, содержащее $
, этот символ будет экранирован ( urlencoded ) в его шестнадцатеричное значение, поэтому var1$var2
будет var1%24var2
.
Когда на целевой странице (phpmethod.php) вы пишете GET['q']
, $
символ автоматически urldecoded , и вы получите исходное значение var1$var2
, поэтому вам не нужно беспокоиться о чем-либо.
Другие экранированные символы также включают пробел (%20
), /
, :
, &
, ?
и т. Д. Также будут экранированы и все символы Unicode выше 0x7F
.
Вы должны использовать функцию urldecode
только в том случае, если вы явно использовали urlencode
в своих данных; поэтому никогда не кодируйте значения $_POST
и $_GET
; они уже декодированы, и вы можете испортить ваши данные, сделав это снова.