/** * 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)); }
/** * 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); }