URL
urlネームスペースはRFC2396にしたがって、パース、保護、ベースからの絶対URLと相対URLを構築する関数を提供します。
urlネームスペースを取得するには次のようにします。
URLは次のような文法で定義されます。
baseはベースURLの文字列、もしくはパースしたURLテーブルです。
relativeは相対URLの文字列です。
この関数は絶対URLの文字列を返します。
注意:構築するための規則はかなり複雑なものです。詳細はRFC2396で述べられています。
以下はその規則がどのようなものかの例です。
parsed_urlはparse関数が返すのと同じコンポーネントを持ったテーブルです。
低レベルのコンポーネントを指定した場合、URL文法の高レベルコンポーネントよりも優先されます。
この関数は構築されたURL文字列を返します。
構成の前に、セグメントの中に予約文字があるとエスケープを行い、有効なURLパスが結果として返されます。
この関数は構築したパスコンポーネントを文字列で返します。
contentはエンコードされる文字列です。
urlはパースされるURLです。defaultテーブルがあった場合、パースした要素を格納するのに使用されます。
URLに含まれている要素だけが上書きされます。したがって、このテーブルは各要素のデフォルト値を指定するのに使用することができます。
この関数は全てのURLコンポーネントを含んだテーブルを返します。
pathはパースされるパスを含んだ文字列です。
URLの中ではいくつかの文字が予約されています。
それらはパスコンポーネントに存在するときはエスケープされなければなりません。
したがって、すべてのパースされたセグメントのリストを返す前に、この関数はそれらすべてからエスケープを削除します。
contentはデコードする文字列です。
この関数はデコードされた文字列を返します。
urlネームスペースを取得するには次のようにします。
-- URLモジュールをロード local url = require("socket.url")
URLは次のような文法で定義されます。
<url> ::= [<scheme>:][//<authority>][/<path>][;<params>][?<query>][#<fragment>] <authority> ::= [<userinfo>@]<host>[:<port>] <userinfo> ::= <user>[:<password>] <path> ::= {<segment>/}<segment>
url.absolute(base, relative)
ベースURLと相対URLから絶対URLを構築します。baseはベースURLの文字列、もしくはパースしたURLテーブルです。
relativeは相対URLの文字列です。
この関数は絶対URLの文字列を返します。
注意:構築するための規則はかなり複雑なものです。詳細はRFC2396で述べられています。
以下はその規則がどのようなものかの例です。
http://a/b/c/d;p?q + g:h = g:h g = http://a/b/c/g ./g = http://a/b/c/g g/ = http://a/b/c/g/ /g = http://a/g //g = http://g ?y = http://a/b/c/?y g?y = http://a/b/c/g?y #s = http://a/b/c/d;p?q#s g#s = http://a/b/c/g#s g?y#s = http://a/b/c/g?y#s ;x = http://a/b/c/;x g;x = http://a/b/c/g;x g;x?y#s = http://a/b/c/g;x?y#s . = http://a/b/c/ ./ = http://a/b/c/ .. = http://a/b/ ../ = http://a/b/ ../g = http://a/b/g ../.. = http://a/ ../../ = http://a/ ../../g = http://a/g
url.build(parsed_url)
URLの一部から、新しいURLを再構築します。parsed_urlはparse関数が返すのと同じコンポーネントを持ったテーブルです。
低レベルのコンポーネントを指定した場合、URL文法の高レベルコンポーネントよりも優先されます。
この関数は構築されたURL文字列を返します。
url.build_path(segments, unsafe)
セグメントのリストからパスコンポーネントを構築します。構成の前に、セグメントの中に予約文字があるとエスケープを行い、有効なURLパスが結果として返されます。
この関数は構築したパスコンポーネントを文字列で返します。
url.escape(content)
content文字列の各バイトを、パーセント文字に続いて整数値で16進数の2バイトが続くようにURLエスケープを適用します。contentはエンコードされる文字列です。
-- urlモジュールをロード url = require("socket.url") code = url.escape("/#?;") -- code = "%2f%23%3f%3b"
url.parse(url, default)
与えられた文字列をパースして、そのコンポーネントをLuaテーブルに入れます。urlはパースされるURLです。defaultテーブルがあった場合、パースした要素を格納するのに使用されます。
URLに含まれている要素だけが上書きされます。したがって、このテーブルは各要素のデフォルト値を指定するのに使用することができます。
この関数は全てのURLコンポーネントを含んだテーブルを返します。
parsed_url = { url = string, scheme = string, authority = string, path = string, params = string, query = string, fragment = string, userinfo = string, host = string, port = string, user = string, password = string }
-- urlモジュールをロード url = require("socket.url") parsed_url = url.parse("http://www.example.com/cgilua/index.lua?a=2#there") -- parsed_url = { -- scheme = "http", -- authority = "www.example.com", -- path = "/cgilua/index.lua" -- query = "a=2", -- fragment = "there", -- host = "www.puc-rio.br", -- } parsed_url = url.parse("ftp://root:passwd@unsafe.org/pub/virus.exe;type=i") -- parsed_url = { -- scheme = "ftp", -- authority = "root:passwd@unsafe.org", -- path = "/pub/virus.exe", -- params = "type=i", -- userinfo = "root:passwd", -- host = "unsafe.org", -- user = "root", -- password = "passwd", -- }
url.parse_path(path)
パスURLコンポーネントを、セグメントに分割します。pathはパースされるパスを含んだ文字列です。
URLの中ではいくつかの文字が予約されています。
それらはパスコンポーネントに存在するときはエスケープされなければなりません。
したがって、すべてのパースされたセグメントのリストを返す前に、この関数はそれらすべてからエスケープを削除します。
url.unescape(content)
文字列からURLエスケープを取り除きます。contentはデコードする文字列です。
この関数はデコードされた文字列を返します。
2007年12月12日(水) 21:59:05 Modified by shfox