?? uri.as
字號(hào):
public function get query() : String
{
return URI.unescapeChars(_query);
}
public function set query(queryStr:String) : void
{
_query = URI.fastEscapeChars(queryStr, URI.URIqueryExcludedBitmap);
// both hierarchical and non-hierarchical URI's can
// have a query. Do not set the hierState.
}
/**
* Accessor to the raw query data. If you are using a custom query
* syntax, this accessor can be used to get and set the query part
* directly with no escaping/unescaping. This should ONLY be used
* if your application logic is handling custom query logic and
* handling the proper escaping of the query part.
*/
public function get queryRaw() : String
{
return _query;
}
public function set queryRaw(queryStr:String) : void
{
_query = queryStr;
}
/**
* The fragment (anchor) portion of the URI. This is valid for
* both hierarchical and non-hierarchical URI's.
*/
public function get fragment() : String
{
return URI.unescapeChars(_fragment);
}
public function set fragment(fragmentStr:String) : void
{
_fragment = URI.fastEscapeChars(fragmentStr, URIfragmentExcludedBitmap);
// both hierarchical and non-hierarchical URI's can
// have a fragment. Do not set the hierState.
}
/**
* The non-hierarchical part of the URI. For example, if
* this URI object represents "mailto:somebody@company.com",
* this will contain "somebody@company.com". This is valid only
* for non-hierarchical URI's.
*/
public function get nonHierarchical() : String
{
return URI.unescapeChars(_nonHierarchical);
}
public function set nonHierarchical(nonHier:String) : void
{
_nonHierarchical = URI.fastEscapeChars(nonHier, URInonHierexcludedBitmap);
// This is a non-hierarchical URI.
this.hierState = false;
}
/**
* Quick shorthand accessor to set the parts of this URI.
* The given parts are assumed to be in unescaped form. If
* the URI is non-hierarchical (e.g. mailto:) you will need
* to call SetScheme() and SetNonHierarchical().
*/
public function setParts(schemeStr:String, authorityStr:String,
portStr:String, pathStr:String, queryStr:String,
fragmentStr:String) : void
{
this.scheme = schemeStr;
this.authority = authorityStr;
this.port = portStr;
this.path = pathStr;
this.query = queryStr;
this.fragment = fragmentStr;
hierState = true;
}
/**
* URI escapes the given character string. This is similar in function
* to the global encodeURIComponent() function in ActionScript, but is
* slightly different in regards to which characters get escaped. This
* escapes the characters specified in the URIbaselineExluded set (see class
* static members). This is needed for this class to work properly.
*
* <p>If a different set of characters need to be used for the escaping,
* you may use fastEscapeChars() and specify a custom URIEncodingBitmap
* that contains the characters your application needs escaped.</p>
*
* <p>Never pass a full URI to this function. A URI can only be properly
* escaped/unescaped when split into its component parts (see RFC 3986
* section 2.4). This is due to the fact that the URI component separators
* could be characters that would normally need to be escaped.</p>
*
* @param unescaped character string to be escaped.
*
* @return escaped character string
*
* @see encodeURIComponent
* @see fastEscapeChars
*/
static public function escapeChars(unescaped:String) : String
{
// This uses the excluded set by default.
return fastEscapeChars(unescaped, URI.URIbaselineExcludedBitmap);
}
/**
* Unescape any URI escaped characters in the given character
* string.
*
* <p>Never pass a full URI to this function. A URI can only be properly
* escaped/unescaped when split into its component parts (see RFC 3986
* section 2.4). This is due to the fact that the URI component separators
* could be characters that would normally need to be escaped.</p>
*
* @param escaped the escaped string to be unescaped.
*
* @return unescaped string.
*/
static public function unescapeChars(escaped:String /*, onlyHighASCII:Boolean = false*/) : String
{
// We can just use the default AS function. It seems to
// decode everything correctly
var unescaped:String;
unescaped = decodeURIComponent(escaped);
return unescaped;
}
/**
* Performance focused function that escapes the given character
* string using the given URIEncodingBitmap as the rule for what
* characters need to be escaped. This function is used by this
* class and can be used externally to this class to perform
* escaping on custom character sets.
*
* <p>Never pass a full URI to this function. A URI can only be properly
* escaped/unescaped when split into its component parts (see RFC 3986
* section 2.4). This is due to the fact that the URI component separators
* could be characters that would normally need to be escaped.</p>
*
* @param unescaped the unescaped string to be escaped
* @param bitmap the set of characters that need to be escaped
*
* @return the escaped string.
*/
static public function fastEscapeChars(unescaped:String, bitmap:URIEncodingBitmap) : String
{
var escaped:String = "";
var c:String;
var x:int, i:int;
for (i = 0; i < unescaped.length; i++)
{
c = unescaped.charAt(i);
x = bitmap.ShouldEscape(c);
if (x)
{
c = x.toString(16);
if (c.length == 1)
c = "0" + c;
c = "%" + c;
c = c.toUpperCase();
}
escaped += c;
}
return escaped;
}
/**
* Is this URI of a particular scheme type? For example,
* passing "http" to a URI object that represents the URI
* "http://site.com/" would return true.
*
* @param scheme scheme to check for
*
* @return true if this URI object is of the given type, false
* otherwise.
*/
public function isOfType(scheme:String) : Boolean
{
// Schemes are never case sensitive. Ignore case.
scheme = scheme.toLowerCase();
return (this._scheme == scheme);
}
/**
* Get the value for the specified named in the query part. This
* assumes the query part of the URI is in the common
* "name1=value1&name2=value2" syntax. Do not call this function
* if you are using a custom query syntax.
*
* @param name name of the query value to get.
*
* @return the value of the query name, empty string if the
* query name does not exist.
*/
public function getQueryValue(name:String) : String
{
var map:Object;
var item:String;
var value:String;
map = getQueryByMap();
for (item in map)
{
if (item == name)
{
value = map[item];
return value;
}
}
// Didn't find the specified key
return new String("");
}
/**
* Set the given value on the given query name. If the given name
* does not exist, it will automatically add this name/value pair
* to the query. If null is passed as the value, it will remove
* the given item from the query.
*
* <p>This automatically escapes any characters that may conflict with
* the query syntax so that they are "safe" within the query. The
* strings passed are assumed to be literal unescaped name and value.</p>
*
* @param name name of the query value to set
* @param value value of the query item to set. If null, this will
* force the removal of this item from the query.
*/
public function setQueryValue(name:String, value:String) : void
{
var map:Object;
map = getQueryByMap();
// If the key doesn't exist yet, this will create a new pair in
// the map. If it does exist, this will overwrite the previous
// value, which is what we want.
map[name] = value;
setQueryByMap(map);
}
/**
* Get the query of the URI in an Object class that allows for easy
* access to the query data via Object accessors. For example:
*
* <listing>
* var query:Object = uri.getQueryByMap();
* var value:String = query["param"]; // get a value
* query["param2"] = "foo"; // set a new value
* </listing>
*
* @return Object that contains the name/value pairs of the query.
*
* @see #setQueryByMap
* @see #getQueryValue
* @see #setQueryValue
*/
public function getQueryByMap() : Object
{
var queryStr:String;
var pair:String;
var pairs:Array;
var item:Array;
var name:String, value:String;
var index:int;
var map:Object = new Object();
// We need the raw query string, no unescaping.
queryStr = this._query;
pairs = queryStr.split('&');
for each (pair in pairs)
{
if (pair.length == 0)
continue;
item = pair.split('=');
if (item.length > 0)
name = item[0];
else
continue; // empty array
if (item.length > 1)
value = item[1];
else
value = "";
name = queryPartUnescape(name);
value = queryPartUnescape(value);
map[name] = value;
}
return map;
}
/**
* Set the query part of this URI using the given object as the
* content source. Any member of the object that has a value of
* null will not be in the resulting query.
*
* @param map object that contains the name/value pairs as
* members of that object.
*
* @see #getQueryByMap
* @see #getQueryValue
* @see #setQueryValue
*/
public function setQueryByMap(map:Object) : void
{
var item:String;
var name:String, value:String;
var queryStr:String = "";
var tmpPair:String;
var foo:String;
for (item in map)
{
name = item;
value = map[item];
if (value == null)
value = "";
// Need to escape the name/value pair so that they
// don't conflict with the query syntax (specifically
// '=', '&', and <whitespace>).
name = queryPartEscape(name);
value = queryPartEscape(value);
tmpPair = name;
if (value.length > 0)
{
tmpPair += "=";
tmpPair += value;
}
if (queryStr.length != 0)
queryStr += '&'; // Add the separator
queryStr += tmpPair;
}
// We don't want to escape. We already escaped the
// individual name/value pairs. If we escaped the
// query string again by assigning it to "query",
// we would have double escaping.
_query = queryStr;
}
/**
* Similar to Escape(), except this also escapes characters that
* would conflict with the name/value pair query syntax. This is
* intended to be called on each individual "name" and "value"
* in the query making sure that nothing in the name or value
* strings contain characters that would conflict with the query
* syntax (e.g. '=' and '&').
*
* @param unescaped unescaped string that is to be escaped.
*
* @return escaped string.
*
* @see #queryUnescape
*/
static public function queryPartEscape(unescaped:String) : String
{
var escaped:String = unescaped;
escaped = URI.fastEscapeChars(unescaped, URI.URIqueryPartExcludedBitmap);
return escaped;
}
/**
* Unescape the individual name/value string pairs.
*
* @param escaped escaped string to be unescaped
*
* @return unescaped string
*
* @see #queryEscape
*/
static public function queryPartUnescape(escaped:String) : String
{
var unescaped:String = escaped;
unescaped = unescapeChars(unescaped);
return unescaped;
}
/**
* Output this URI as a string. The resulting string is properly
* escaped and well formed for machine processing.
*/
public function toString() : String
{
if (this == null)
return "";
else
return toStringInternal(false);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
減小字號(hào)
Ctrl + -