+/**
+ * handy function to set url vars
+ *
+ * especially useful when $url = $PHP_SELF
+ * @param string $url url that must be modified
+ * @param string $var variable name
+ * @param string $val variable value
+ * @param boolean $link controls sanitizing of ampersand in urls (since 1.3.2)
+ * @return string $url modified url
+ * @since 1.3.0
+ */
+function set_url_var($url, $var, $val=0, $link=true) {
+ $k = '';
+ $pat_a = array (
+ '/.+(\\&'.$var.')=(.*)\\&/AU', /* in the middle */
+ '/.+\\?('.$var.')=(.*\\&).+/AU', /* at front, more follow */
+ '/.+(\\?'.$var.')=(.*)$/AU', /* at front and only var */
+ '/.+(\\&'.$var.')=(.*)$/AU' /* at the end */
+ );
+ $url = preg_replace('/&/','&',$url);
+
+ // FIXME: why switch is used instead of if () or one preg_match()
+ switch (true) {
+ case (preg_match($pat_a[0],$url,$regs)):
+ $k = $regs[1];
+ $v = $regs[2];
+ break;
+ case (preg_match($pat_a[1],$url,$regs)):
+ $k = $regs[1];
+ $v = $regs[2];
+ break;
+ case (preg_match($pat_a[2],$url,$regs)):
+ $k = $regs[1];
+ $v = $regs[2];
+ break;
+ case (preg_match($pat_a[3],$url,$regs)):
+ $k = $regs[1];
+ $v = $regs[2];
+ break;
+ default:
+ if ($val) {
+ if (strpos($url,'?')) {
+ $url .= "&$var=$val";