Движение, где PHP parse_url () не делает - Парсинг только домена

Чтобы изменить имя пакета для приложения Xamarin, вам необходимо вручную изменить имя пакета, перейдя в AndroidManifest.xml и изменив атрибут пакета.

Файл AndroidManifest.xml доступен в разделе

[Solution Name]>[App Name]>Properties>AndroidManifest.xml in your solution explorer.

. Затем приложение необходимо будет перестроить, чтобы изменение имени пакета вступило в силу.

12
задан Gavin M. Roy 30 December 2008 в 01:07
поделиться

6 ответов

Как насчет чего-то как этот?

function getDomain($url) {
  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
    return $regs['domain'];
  }
  return false;
}

Извлечет доменное имя с помощью классика parse_url и затем ищите допустимый домен без любого субдомена (www быть субдоменом). Не будет работать над вещами как 'localhost'. Возвратит false, если он ничему не соответствовал.

//Редактирование:

Испытайте его с:

echo getDomain('http://www.google.com/test.html') . '<br/>';
echo getDomain('https://news.google.co.uk/?id=12345') . '<br/>';
echo getDomain('http://my.subdomain.google.com/directory1/page.php?id=abc') . '<br/>';
echo getDomain('https://testing.multiple.subdomain.google.co.uk/') . '<br/>';
echo getDomain('http://nothingelsethan.com') . '<br/>';

И это должно возвратиться:

google.com
google.co.uk
google.com
google.co.uk
nothingelsethan.com

Конечно, это ничего не возвратит, если это не пройдет parse_url, поэтому удостоверьтесь, что это - правильно построенный URL.

//Приложение:

Alnitak является правильным. Решение, представленное выше, будет работать в большинстве случаев, но не обязательно все и должно сохраняться, чтобы удостовериться, например, что их не новый TLD с .morethan6characters и так далее. Единственный надежный способ извлечь домен состоит в том, чтобы использовать ведомый список, такой как http://publicsuffix.org/. Это более болезненно сначала, но легче и более устойчиво на долгосрочном. Необходимо удостовериться, что Вы понимаете за и против каждого метода и как он соответствует Вашему проекту.

17
ответ дан 2 December 2019 в 05:42
поделиться

В настоящее время единственный "правильный" способ сделать это должно использовать список, такой как сохраняемый по http://publicsuffix.org/

BTW, этим вопросом является также в значительной степени дубликат:

Существуют работы по стандартизации при рассмотрении IETF методов DNS объявления, используется ли конкретный узел в дереве DNS для "общедоступной" регистрации, но они находятся на своих ранних стадиях развития. Все популярные браузеры неIE используют список publicsuffix.org.

6
ответ дан 2 December 2019 в 05:42
поделиться

Вскопанный это из связанного сообщения, для идеи сохранить таблицу: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/src/effective_tld_names.dat?raw=1

Я не сделал бы этого все же.

1
ответ дан 2 December 2019 в 05:42
поделиться

Конечно, это зависит от Вашего определенного варианта использования, но вообще говоря, я не использовал бы поиск по таблице для TLDs. Новые TLDs выходят, и Вы обычно не хотите поддерживать их где угодно. Просто спросите меня, как часто мой firstname@lastname.name был отклонен из-за близорукости.

Я предполагаю, что мог помочь лучше, если бы я знал, почему Вы не хотите www? Вам нужен он для электронных писем? Можно запросить для записей MX в таких случаях, чтобы проверить, что это (в конечном счете) принимает письма.

Можно также найти, что справка с функциями PHP, имеющими дело с записями DNS, узнает больше информации о них, видит http://php.net/dns_get_record, например.

0
ответ дан 2 December 2019 в 05:42
поделиться

Существует действительно легкое решение этого:

function get_domain($url) {
  $pieces = parse_url($url);
  return array_pop(explode('.', $pieces['host'], 2));
}

Конечно, это будет работать?

-2
ответ дан 2 December 2019 в 05:42
поделиться

Просто доказательство, принимая позволенный tlds запоминается в хеш. Код может быть сокращен много.

<?php
    $urlCompoments=parse_url($theUrl);
    $chunk=explode('.',$urlComponents['host']);

    $tldIndex = count($chunk-1); // assume last chunk is tld
    $maxTldLen = 2; // assuming a tld can be in the form .com or .co.uk
    $cursor=1;
    $found=false;
    while(($cursor<=$maxTldLen) or $found) {
      $tls = implode('.',array_slice($chunk, -$cursor));
      $found=isset($tldSuffixesAllowed[$tld]);
      $cursor++;
    }
    if ($found){
       $tld=implode('.',array_slice($chunk, -$cursor));
    } else {
       // domain not recognized, do wathever you want
    }
?>
0
ответ дан 2 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: