Berriart Berriart

Desarrollo web con software libre

Comprobar TLDs válidos en PHP

Guardar este artículo en Delicious Compartir este artículo en Twitter Compartir este artículo en Facebook

Estoy de vuelta de vacaciones, y no os voy a contar nada especialmente novedoso, pero es uno de esos apuntes que me hace falta de vez en cuando y que mejor sitio para tenerlo a mano que el blog. La función en sí no es nada del otro mundo, pero a la hora de comprobar el TLD de un email o de una URL siempre es bueno tener a mano la lista de TLDs válidos, así que los acabo de sacar de IANA y he preparado esta pequeña función:

<?php

// TLDs válidos sacados de IANA (http://www.iana.org) el 21/07/2009
$validTLDs = array( 'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai',
	 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as',
	 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb',
	 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj',
	 'bl', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv',
	 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf',
	 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co',
	 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz',
	 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu',
	 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi',
	 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd',
	 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn',
	 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw',
	 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id',
	 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq',
	 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp',
	 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw',
	  'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr',
	  'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md',
	  'me', 'mf', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm',
	  'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt',
	  'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na',
	  'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl',
	  'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa',
	  'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn',
	  'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're',
	  'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd',
	  'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm',
	  'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz',
	  'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk',
	  'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt',
	  'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'um', 'us', 'uy',
	  'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf',
	  'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw'
);

/**
 * Función is_valid_tld
 *
 * Función que comprueba si el TLD de una URL o un email es válido o no
 *
 * @param string $urloremail Email o URL a testear
 * @return boolean Devuelve TRUE si la entrada tiene un TLD válido
 */
function is_valid_tld( $urloremail ) {
	global $validTLDs;

	// Check if is an email
	if( strpos($urloremail, '@') > 0 && strpos($urloremail, '://') === false ) {
		// Is an email, get TLD
		$tld = end( explode('.', $urloremail) );
	}
	else {
		// Is an url, get TLD
		$host = parse_url($urloremail, PHP_URL_HOST);
		$tld = end( explode('.', $host) );
	}

	return in_array($tld, $validTLDs);
}

?>
Deja un comentario