0

私はいくつかの CSS および JS ファイルを圧縮していますが、parse_url を使用して URL コンポーネントを取得するメソッドはほとんどありません。PHP 5.3.28 より前のバージョンではホストが存在せず、正しいパスを取得するために圧縮機能がホストに大きく依存していることがわかりました。

だからphp 5.3.28 <私は得る

Array
(
    [path] => //fonts.googleapis.com/css
    [query] => family=Open+Sans
)

および 5.3.28 >

Array
(
    [host] => fonts.googleapis.com
    [path] => /css
    [query] => family=Open+Sans
)

誰でも可能な置換関数または実際の 5.3.28 > parse_url または私が使用できる正規表現を投稿できますか。

どんな助けでも大歓迎です。

4

1 に答える 1

1

コメントの 1 つに記載されているように、バージョン 5.4.7 より前では、PHP はスキームのない URL のホスト部分を認識しません。example.com に渡されたときに parse_url() がエラーを返すことを確認してください。いくつかの可能な解決策についての質問があります。そのうちの 1 つは、デフォルトのスキームを手動で追加することです。または、この例を試すことができます。

$url = '//fonts.googleapis.com/css?family=Open+Sans';
$url_parts = parse_url( $url );

if ( !isset( $url_parts['host'] ) ) {
    $part = ( isset( $url_parts['path'] ) ? $url_parts['path'] : '' ) . ( isset( $url_parts['query'] ) ? '?' . $url_parts['query'] : '' ) . ( isset( $url_parts['fragment'] ) ? '#' . $url_parts['fragment'] : '' );    
    $host = strstr( $url, $part, true );
    $url_parts['host'] = substr( $host, strpos( $host, '//' ) + 2 );
}
于 2014-11-29T19:23:42.300 に答える