Intereting Posts
Получение геолокации с IP-адреса Нужна помощь с моей функцией PHP пейджера теперь, когда я использую mod-rewrite Как создать переменную в PHP сегодняшней даты формата MM / DD / YYYY? неожиданный T_VARIABLE, ожидающий T_FUNCTION Как создать файл .gz с помощью PHP? Организация тестов PHPUnit в пространствах имен Скопировать изображение с удаленного сервера через HTTPS Постоянство сеанса между несколькими доменами? Веб-приложение PHP: вопрос о наилучшей практике проектирования баз данных mysql Уничтожить сеанс PHP при закрытии API Google: аутентифицировать запрос с помощью OAuth, но без окна согласия пользователя, затем запрашивать данные Google для определенного имени пользователя или идентификатора пользователя Проблема с PHP php SDK для GetLogoutUrl () «У этой учетной записи не хватает разрешений» DocuSign PHP: объединить элементы массива на основе определенного ключа и значения Как получить доступ к частной электронной таблице из API?

php – добавить / обновить параметр в URL-адресе

Возможный дубликат:
Изменение значения одной переменной в 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; }