--- handlers/views_handler_field.inc.orig	2009-04-17 15:23:08.000000000 -0500
+++ handlers/views_handler_field.inc	2009-04-20 08:54:01.000000000 -0500
@@ -471,6 +471,142 @@
     return $value;
   }
 
+  function my_url($path = NULL, $options = array()) {
+    // Merge in defaults.
+    $options += array(
+      'fragment' => '',
+      'query' => '',
+      'absolute' => FALSE,
+      'alias' => FALSE,
+      'prefix' => ''
+    );
+
+    if (!isset($options['external'])) {
+      // Return an external link if $path contains an allowed absolute URL.
+      // Only call the slow filter_xss_bad_protocol if $path contains a ':' before
+      // any / ? or #.
+      $colonpos = strpos($path, ':');
+      $options['external'] = ($colonpos !== FALSE && !preg_match('![/?#]!', substr($path, 0, $colonpos)) && filter_xss_bad_protocol($path, FALSE) == check_plain($path));
+    }
+
+    // May need language dependent rewriting if language.inc is present.
+    if (function_exists('language_url_rewrite')) {
+      language_url_rewrite($path, $options);
+    }
+    if ($options['fragment']) {
+      $options['fragment'] = '#'. $options['fragment'];
+    }
+    if (is_array($options['query'])) {
+      $options['query'] = drupal_query_string_encode($options['query']);
+    }
+
+    if ($options['external']) {
+      // Split off the fragment.
+      if (strpos($path, '#') !== FALSE) {
+        list($path, $old_fragment) = explode('#', $path, 2);
+        if (isset($old_fragment) && !$options['fragment']) {
+          $options['fragment'] = '#'. $old_fragment;
+        }
+      }
+      // Append the query.
+      if ($options['query']) {
+        $path .= (strpos($path, '?') !== FALSE ? '&' : '?') . $options['query'];
+      }
+      // Reassemble.
+      return $path . $options['fragment'];
+    }
+
+    global $base_url;
+    static $script;
+
+    if (!isset($script)) {
+      // On some web servers, such as IIS, we can't omit "index.php". So, we
+      // generate "index.php?q=foo" instead of "?q=foo" on anything that is not
+      // Apache.
+      $script = (strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') === FALSE) ? 'index.php' : '';
+    }
+
+    if (!isset($options['base_url'])) {
+      // The base_url might be rewritten from the language rewrite in domain mode.
+      $options['base_url'] = $base_url;
+    }
+
+    // Preserve the original path before aliasing.
+    $original_path = $path;
+
+    // The special path '<front>' links to the default front page.
+    if ($path == '<front>') {
+      $path = '';
+    }
+    elseif (!empty($path) && !$options['alias']) {
+      $path = drupal_get_path_alias($path, isset($options['language']) ? $options['language']->language : '');
+    }
+
+    if (function_exists('custom_url_rewrite_outbound')) {
+      // Modules may alter outbound links by reference.
+      custom_url_rewrite_outbound($path, $options, $original_path);
+    }
+
+    $base = $options['absolute'] ? $options['base_url'] .'/' : base_path();
+    $prefix = empty($path) ? rtrim($options['prefix'], '/') : $options['prefix'];
+    //$path = drupal_urlencode($prefix . $path);
+
+    if (variable_get('clean_url', '0')) {
+      // With Clean URLs.
+      if ($options['query']) {
+        return $base . $path .'?'. $options['query'] . $options['fragment'];
+      }
+      else {
+        return $base . $path . $options['fragment'];
+      }
+    }
+    else {
+      // Without Clean URLs.
+      $variables = array();
+      if (!empty($path)) {
+        $variables[] = 'q='. $path;
+      }
+      if (!empty($options['query'])) {
+        $variables[] = $options['query'];
+      }
+      if ($query = join('&', $variables)) {
+        return $base . $script .'?'. $query . $options['fragment'];
+      }
+      else {
+        return $base . $options['fragment'];
+      }
+    }
+  }
+
+  function my_l($text, $path, $options = array()) {
+    global $language;
+
+    // Merge in defaults.
+    $options += array(
+        'attributes' => array(),
+        'html' => FALSE,
+      );
+
+    // Append active class.
+    if (($path == $_GET['q'] || ($path == '<front>' && drupal_is_front_page())) &&
+        (empty($options['language']) || $options['language']->language == $language->language)) {
+      if (isset($options['attributes']['class'])) {
+        $options['attributes']['class'] .= ' active';
+      }
+      else {
+        $options['attributes']['class'] = 'active';
+      }
+    }
+
+    // Remove all HTML and PHP tags from a tooltip. For best performance, we act only
+    // if a quick strpos() pre-check gave a suspicion (because strip_tags() is expensive).
+    if (isset($options['attributes']['title']) && strpos($options['attributes']['title'], '<') !== FALSE) {
+      $options['attributes']['title'] = strip_tags($options['attributes']['title']);
+    }
+
+    return '<a href="'. check_url($this->my_url($path, $options)) .'"'. drupal_attributes($options['attributes']) .'>'. ($options['html'] ? $text : check_plain($text)) .'</a>';
+  }
+
   /**
    * Render this field as a link, with the info from a fieldset set by
    * the user.
@@ -509,7 +645,7 @@
       $options['fragment'] = $this->options['alter']['fragment'];
     }
 
-    $value .= l($text, $path, $options);
+    $value .= $this->my_l($text, $path, $options);
 
     if (!empty($this->options['alter']['suffix'])) {
       $value .= filter_xss_admin($this->options['alter']['suffix']);
