示例#1
0
 /**
  * Test strrchr.
  */
 public function test_strrchr()
 {
     $str = "Žluťoučký koníček";
     $this->assertSame('koníček', core_text::strrchr($str, 'koní'));
     $this->assertSame('Žluťoučký ', core_text::strrchr($str, 'koní', true));
     $this->assertFalse(core_text::strrchr($str, 'A'));
     $this->assertFalse(core_text::strrchr($str, 'ç', true));
 }
示例#2
0
/**
 * Combine a base URL and a relative URL to produce a new
 * absolute URL.  The base URL is often the URL of a page,
 * and the relative URL is a URL embedded on that page.
 *
 * This function implements the "absolutize" algorithm from
 * the RFC3986 specification for URLs.
 *
 * This function supports multi-byte characters with the UTF-8 encoding,
 * per the URL specification.
 *
 * Parameters:
 * 	baseUrl		the absolute base URL.
 *
 * 	url		the relative URL to convert.
 *
 * Return values:
 * 	An absolute URL that combines parts of the base and relative
 * 	URLs, or FALSE if the base URL is not absolute or if either
 * 	URL cannot be parsed.
 */
function url_to_absolute($baseUrl, $relativeUrl)
{
    // If relative URL has a scheme, clean path and return.
    $r = split_url($relativeUrl);
    if ($r === FALSE) {
        return FALSE;
    }
    if (!empty($r['scheme'])) {
        if (!empty($r['path']) && $r['path'][0] == '/') {
            $r['path'] = url_remove_dot_segments($r['path']);
        }
        return join_url($r);
    }
    // Make sure the base URL is absolute.
    $b = split_url($baseUrl);
    if ($b === FALSE || empty($b['scheme']) || empty($b['host'])) {
        return FALSE;
    }
    $r['scheme'] = $b['scheme'];
    if (empty($b['path'])) {
        $b['path'] = '';
    }
    // If relative URL has an authority, clean path and return.
    if (isset($r['host'])) {
        if (!empty($r['path'])) {
            $r['path'] = url_remove_dot_segments($r['path']);
        }
        return join_url($r);
    }
    unset($r['port']);
    unset($r['user']);
    unset($r['pass']);
    // Copy base authority.
    $r['host'] = $b['host'];
    if (isset($b['port'])) {
        $r['port'] = $b['port'];
    }
    if (isset($b['user'])) {
        $r['user'] = $b['user'];
    }
    if (isset($b['pass'])) {
        $r['pass'] = $b['pass'];
    }
    // If relative URL has no path, use base path
    if (empty($r['path'])) {
        if (!empty($b['path'])) {
            $r['path'] = $b['path'];
        }
        if (!isset($r['query']) && isset($b['query'])) {
            $r['query'] = $b['query'];
        }
        return join_url($r);
    }
    // If relative URL path doesn't start with /, merge with base path.
    if ($r['path'][0] != '/') {
        $base = core_text::strrchr($b['path'], '/', TRUE);
        if ($base === FALSE) {
            $base = '';
        }
        $r['path'] = $base . '/' . $r['path'];
    }
    $r['path'] = url_remove_dot_segments($r['path']);
    return join_url($r);
}