I am not so sure that adding special cases for things like mailto: and so on 
is a good idea. The code works identically to how it worked in 4.2.3 and 
prior.

Ilia

On November 27, 2002 04:19 pm, Sara "Pollita" Golemon wrote:
> While waiting for opinions on Bug#20460 I went ahead and addressed #20308.
>
> User complains that parse_url returns the full email address in 'path'
> element.  Makes reference to documents which claim it should return 'user'
> and 'host' element.
>
> To address this request and maintain backward compatability I wrote a
> patch to split the 'path' element in to 'host' and 'user' elements then
> return all three.
>
> Ex:
> *current behavior*
> print_r(parse_url("mailto:[EMAIL PROTECTED]";));
> Array (
>   [scheme] => mailto
>   [path] => [EMAIL PROTECTED]
> }
>
> *new behavior*
> print_r(parse_url("mailto:[EMAIL PROTECTED]";));
> Array (
>   [scheme] => mailto
>   [path] => [EMAIL PROTECTED]
>   [user] => pollita
>   [host] => php.net
> }
>
> If there are no objections I'll commit this change.
>
>
>
> Index: url.c
> ===================================================================
> RCS file: /repository/php4/ext/standard/url.c,v
> retrieving revision 1.59
> diff -u -r1.59 url.c
> --- url.c     14 Nov 2002 13:40:14 -0000      1.59
> +++ url.c     27 Nov 2002 20:44:25 -0000
> @@ -267,6 +267,26 @@
>               php_replace_controlchars(ret->path);
>       }
>
> +     if (strcmp(ret->scheme,"mailto") == 0) {
> +             s = estrndup(ret->path, strlen(ret->path));
> +             ue = s + strlen(ret->path);
> +             p = s + 1;
> +             /* a mailto starting with @ would be malformed, but let's keep it clean
> */ +          if (s[0] == '@') {
> +                     s[0] = '\0';
> +             }
> +             /* scan for @ to separate user from host */
> +             while (p < ue && p[-1] != '\0') {
> +                     if (p[0] == '@') {
> +                             p[0] = '\0';
> +                     }
> +                     p++;
> +             }
> +             ret->user = s;
> +             /* the free() process in php_url_free will segfault if we don't
> duplicate this string value */
> +             ret->host = estrndup(p, (ue-p));
> +     }
> +
>       return ret;
>  }
>  /* }}} */


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to