Возможный дубликат:
Изменение значения одной переменной в querystring
Я обнаружил, что эта функция добавляет или обновляет параметр для заданного URL-адреса, он работает, когда необходимо добавить параметр, но если параметр существует, он не заменяет его – извините, я мало знаю о регулярном выражении, может кто угодно смотреть :
function addURLParameter ($url, $paramName, $paramValue) { // first check whether the parameter is already // defined in the URL so that we can just update // the value if that's the case. if (preg_match('/[?&]('.$paramName.')=[^&]*/', $url)) { // parameter is already defined in the URL, so // replace the parameter value, rather than // append it to the end. $url = preg_replace('/([?&]'.$paramName.')=[^&]*/', '$1='.$paramValue, $url) ; } else { // can simply append to the end of the URL, once // we know whether this is the only parameter in // there or not. $url .= strpos($url, '?') ? '&' : '?'; $url .= $paramName . '=' . $paramValue; } return $url ; }
вот пример того, что не работает:
http://www.mysite.com/showprofile.php?id=110&l=arabic
если я назову addURLParameter с l = английским, я получаю
http://www.mysite.com/showprofile.php?id=110&l=arabic&l=english
заранее спасибо.
Почему бы не использовать стандартные функции PHP для работы с URL-адресами?
function addURLParameter ($url, $paramName, $paramValue) { $url_data = parse_url($url); $params = array(); parse_str($url_data['query'], $params); $params[$paramName] = $paramValue; $params_str = http_build_query($params); return http_build_url($url, array('query' => $params_str)); }
Извините, не заметил, что http_build_url – это PECL 🙂 build_url
перевернем нашу собственную функцию build_url
.
function addURLParameter($url, $paramName, $paramValue) { $url_data = parse_url($url); if(!isset($url_data["query"])) $url_data["query"]=""; $params = array(); parse_str($url_data['query'], $params); $params[$paramName] = $paramValue; $url_data['query'] = http_build_query($params); return build_url($url_data); } function build_url($url_data) { $url=""; if(isset($url_data['host'])) { $url .= $url_data['scheme'] . '://'; if (isset($url_data['user'])) { $url .= $url_data['user']; if (isset($url_data['pass'])) { $url .= ':' . $url_data['pass']; } $url .= '@'; } $url .= $url_data['host']; if (isset($url_data['port'])) { $url .= ':' . $url_data['port']; } } $url .= $url_data['path']; if (isset($url_data['query'])) { $url .= '?' . $url_data['query']; } if (isset($url_data['fragment'])) { $url .= '#' . $url_data['fragment']; } return $url; }