2014-11-29 2 views
0

일부 CSS 및 JS 파일을 압축하고 urse 구성 요소를 가져 오는 데 parse_url을 사용하는 몇 가지 방법이 있습니다. 단지 PHP 5.3.28 이전에는 호스트이없고 정확한 압축을 위해 정확한 압축 기능이 필요하다는 것을 알았습니다.parse_url과 동등하거나 사용자 정의 구문 분석 url 함수가 있습니까?

그래서 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 또는 정규식을 게시 할 수 있습니다 나는 함께 할 수 있었다.

도움을 주시면 감사하겠습니다.

+0

'host'는 이전 PHP 버전에서도 분리되어 있습니다. 필요에 따라 [실제 ** URL **] (https://tools.ietf.org/html/rfc3986#page-6)를 전달하지 않고 있습니다. 최신 버전은 결석 한 접두사가있는 경우에만 관대합니다. – mario

+0

[소스 코드] (https://github.com/php/php-src/blob/88ca46d92bc1c426e7c7f7313f0fd2b7dcc33cf6/ext/standard/url.c)를보십시오. 나는 당신이 90 행에서보아야한다고 생각한다. 조언 : 5.3보다 낮은 PHP 버전에서는 작동하지 않는다. 5.4 또는 5.5로 작업하는 것이 좋습니다. 성능 및 버그 수정 외에도 보안 수정 및 더 멋진 기능이 있습니다. – HamZa

답변

1

5.4.7 이전 버전의 주석 중 하나에서 설명한 것처럼 PHP는 스키마가없는 URL의 호스트 부분을 인식하지 못합니다. parse_url() returns an error when example.com is passed에 몇 가지 가능한 해결책이 있는지 확인하십시오. 그 중 하나는 수동으로 기본 체계를 추가하는 것이거나이 예제를 시도 할 수 있습니다.

$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); 
} 
관련 문제