/** * Test strrchr. */ public function test_strrchr() { $str = "Žluťoučký koníček"; $this->assertSame('koníček', textlib::strrchr($str, 'koní')); $this->assertSame('Žluťoučký ', textlib::strrchr($str, 'koní', true)); $this->assertFalse(textlib::strrchr($str, 'A')); $this->assertFalse(textlib::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 = textlib::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); }