regex — существует ли parse_url эквивалентная или пользовательская функция синтаксического анализа PHP?

Я сжимаю некоторые файлы 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 или регулярное выражение, с которым я мог бы работать.

Любая помощь приветствуется.

0

Решение

Как указано в одном из комментариев, до версии 5.4.7 PHP не распознавал часть хоста для URL-адресов без схемы. Проверьте parse_url () возвращает ошибку при передаче example.com Вопрос для нескольких возможных решений, одно из них — вручную добавить схему по умолчанию, или, вы можете попробовать этот пример.

$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 );
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]