PDA

Просмотр полной версии : Помогите с алгоритмом преобразования URL адреса


kodemak
17.06.2010, 14:13
есть переменная:

url = "http://www.youtube.com/watch?v=NR_E_B8k-cI&playnext_from=TL&videos=LUGpwNqSBXo&feature=grec_index"
//или
url = "youtube.com/watch?v=NR_E_B8k-cI&playnext_from=TL&videos=LUGpwNqSBXo&feature=grec_index"
//в общем любой URL


нужно ее преобразовать в:
site = "http://www.youtube.com"

с начало нужно определить есть ли в начале переменной "http://", если есть то дописать.
Затем стереть все что стоит после третьего слеша "/", вмести со слешем.

стоит отметить что адреса есть и такие:
http://mysite.ru?topic=http://site.com
так что к стиранию всего что после 3его слеша нужно применить условия..:bb:

помогите с реализацией!

Хемуль
17.06.2010, 14:26
2 kodemak:
Так вам путь к корню сайта нужно получить? А то я что-то не понял про "третьи слеши".

kodemak
17.06.2010, 14:32
ну да

Fatality
17.06.2010, 14:52
var strURL:String = "http://www.youtube.com?fgdfgd";
var validUrl:String = makeValidURL(strURL);
trace(validUrl);
function makeValidURL(strURL:String):String {
var strValidURL:String = strURL;
var strHTTPPrefix:String = "http://";
if (strValidURL.indexOf(strHTTPPrefix) != 0) {
if (strValidURL.indexOf("/") != -1) strValidURL = strValidURL.substr(0, strValidURL.indexOf("/"));
strValidURL = strHTTPPrefix + strValidURL;
} else if (strValidURL.indexOf("/", strHTTPPrefix.length) != -1) strValidURL = strValidURL.substr(0, strValidURL.indexOf("/", strHTTPPrefix.length));
if (strValidURL.indexOf("?") != -1) strValidURL = strValidURL.substr(0, strValidURL.indexOf("?"));
return strValidURL;
}

Хемуль
17.06.2010, 14:58
2 kodemak:
Ну, либо переделать флексовый URLUtil под AS2:

var url = "http://flasher.ru/find.php?query=http://google.com";

trace(getProtocol(url) + "://" + getServerName(url));

function getServerName(url:String):String
{
var sp:String = getServerNameWithPort(url);
var delim:Number = sp.indexOf("]");
delim = (delim > -1) ? sp.indexOf(":", delim) : sp.indexOf(":");
if (delim > 0)
sp = sp.substring(0, delim);
return sp;
}

function getServerNameWithPort(url:String):String
{
var start:Number = url.indexOf("/") + 2;
var length:Number = url.indexOf("/", start);
return length == -1 ? url.substring(start) : url.substring(start, length);
}

function getProtocol(url:String):String
{
var slash:Number = url.indexOf("/");
var indx:Number = url.indexOf(":/");
if (indx > -1 && indx < slash)
{
return url.substring(0, indx);
}
else
{
indx = url.indexOf("::");
if (indx > -1 && indx < slash)
return url.substring(0, indx);
}
return "";
}


У Fatality более простое решение, которое обрабатывает только http-протокол, скажем. Так что выбирайте, что вам удобнее и более подходяще.