111 lines
5.5 KiB
PHP
111 lines
5.5 KiB
PHP
<?php
|
|
// File name: rfc1738.inc.php
|
|
// Description: PHP regular expressions for RFC 1738 URL patterns
|
|
// Date: 2004-02-11
|
|
// Author: imacat <imacat@pristine.com.tw>
|
|
// Copyright: Copyright (C) 2004-2007 Pristine Communications
|
|
|
|
// Set the include path
|
|
if (!defined("INCPATH_SET")) {
|
|
require_once dirname(__FILE__) . "/incpath.inc.php";
|
|
}
|
|
// Referenced subroutines
|
|
require_once "monica/rfc822.inc.php";
|
|
require_once "monica/html401.inc.php";
|
|
|
|
define("RFC1738_ALPHA", "[A-Za-z]");
|
|
define("RFC1738_DIGIT", "\\d");
|
|
define("RFC1738_DIGITS", "\\d+");
|
|
define("RFC1738_HEX", "[\\dA-Fa-f]");
|
|
define("RFC1738_ALPHADIGIT", "[A-Za-z\\d]");
|
|
define("RFC1738_SAFE", "[$\\-_\\.+]");
|
|
define("RFC1738_EXTRA", "[!*'(),]");
|
|
define("RFC1738_ESCAPE", "%" . RFC1738_HEX . "{2}");
|
|
define("RFC1738_RESERVED", "[;\\/?:@&=]");
|
|
// Alpha, digit, safe, extra
|
|
define("RFC1738_UNRESERVED", "[A-Za-z\\d$\\-_\\.+!*'(),]");
|
|
// Unreserved, reserved, escape
|
|
define("RFC1738_XCHAR", "(?:[A-Za-z\\d$\\-_\\.+!*'(),;\\/?:@&=]|" . RFC1738_ESCAPE . ")");
|
|
define("RFC1738_UCHAR", "(?:" . RFC1738_UNRESERVED . "|" . RFC1738_ESCAPE . ")");
|
|
|
|
define("RFC1738_SCHEME", "[A-Za-z\\d+\\-\\.]+");
|
|
define("RFC1738_DOMAINLABEL", "(?:" . RFC1738_ALPHADIGIT . "|"
|
|
. RFC1738_ALPHADIGIT . "(?:" . RFC1738_ALPHADIGIT . "|-)*" . RFC1738_ALPHADIGIT . ")");
|
|
define("RFC1738_TOPLABEL", "(?:" . RFC1738_ALPHA . "(?:" . RFC1738_ALPHADIGIT . "|-)*" . RFC1738_ALPHADIGIT . "|"
|
|
. RFC1738_ALPHA . ")");
|
|
define("RFC1738_HOSTNAME", "(?:" . RFC1738_DOMAINLABEL . "\\.)*" . RFC1738_TOPLABEL);
|
|
define("RFC1738_HOSTNUMBER", "\\d+\\.\\d+\\.\\d+\\.\\d+");
|
|
define("RFC1738_HOST", "(?:" . RFC1738_HOSTNAME . "|" . RFC1738_HOSTNUMBER . ")");
|
|
define("RFC1738_PORT", RFC1738_DIGITS);
|
|
define("RFC1738_USER", "(?:" . RFC1738_UCHAR . "|[;?&=])*");
|
|
define("RFC1738_PASSWORD", "(?:" . RFC1738_UCHAR . "|[;?&=])*");
|
|
define("RFC1738_HOSTPORT", RFC1738_HOST . "(?::" . RFC1738_PORT . ")?");
|
|
define("RFC1738_LOGIN", "(?:" . RFC1738_USER . "(?::" . RFC1738_PASSWORD . ")?@)?" . RFC1738_HOSTPORT);
|
|
|
|
// FTP, also section 3.2
|
|
define("RFC1738_FTPTYPE", "[AIDaid]");
|
|
define("RFC1738_FSEGMENT", "(?:" . RFC1738_UCHAR . "|[?:@&=])*");
|
|
define("RFC1738_FPATH", RFC1738_FSEGMENT . "(?:\\/" . RFC1738_FSEGMENT . ")*");
|
|
define("RFC1738_FTPURL", "[fF][tT][pP]:\\/\\/" . RFC1738_LOGIN . "(?:\\/" . RFC1738_FPATH . "(?:;type=" . RFC1738_FTPTYPE . ")?)?");
|
|
|
|
// FILE
|
|
define("RFC1738_FILEURL", "[fF][iI][lL][eE]:\\/\\/(?:" . RFC1738_HOST . "|localhost)?\\/" . RFC1738_FPATH);
|
|
|
|
// HTTP, also section 3.3
|
|
define("RFC1738_HSEGMENT", "(?:" . RFC1738_UCHAR . "|[;:@&=])*");
|
|
define("RFC1738_SEARCH", "(?:" . RFC1738_UCHAR . "|[;:@&=])*");
|
|
define("RFC1738_HPATH", RFC1738_HSEGMENT . "(?:\\/" . RFC1738_HSEGMENT . ")*");
|
|
// hostport should be login
|
|
define("RFC1738_HTTPURL", "[hH][tT][tT][pP]:\\/\\/" . RFC1738_HOSTPORT . "(?:\\/" . RFC1738_HPATH . "(?:\\?" . RFC1738_SEARCH . ")?)?");
|
|
|
|
// Local fix to HTTP URL
|
|
// hsegment does not include the tide "~" character (users' home direcories).
|
|
// It is a common practice now.
|
|
define("RFC1738_LOCAL_HSEGMENT", "(?:" . RFC1738_UCHAR . "|[;:@&=~])*");
|
|
// hostport should be login
|
|
define("RFC1738_LOCAL_HTTPURL", str_replace(RFC1738_HOSTPORT, RFC1738_LOGIN,
|
|
str_replace(RFC1738_HSEGMENT, RFC1738_LOCAL_HSEGMENT, RFC1738_HTTPURL))
|
|
. "(?:#" . HTML401_ID . ")?");
|
|
// HTTPS does not exist in RFC 1738
|
|
define("RFC1738_LOCAL_HTTPSURL", str_replace("[hH][tT][tT][pP]:", "[hH][tT][tT][pP][sS]:", RFC1738_HTTPURL));
|
|
|
|
// GOPHER
|
|
define("RFC1738_GTYPE", RFC1738_XCHAR);
|
|
define("RFC1738_SELECTOR", RFC1738_XCHAR . "*");
|
|
define("RFC1738_GOPHERP_STRING", RFC1738_XCHAR . "*");
|
|
define("RFC1738_GOPHERURL", "[gG][oO][pP][hH][eE][rR]:\\/\\/" . RFC1738_HOSTPORT . "(?:\\/(?:" . RFC1738_GTYPE . "(?:" . RFC1738_SELECTOR . "(?:%09" . RFC1738_SEARCH . "(?:" . RFC1738_GOPHERP_STRING . ")?)?)?)?)?");
|
|
|
|
// MAILTO
|
|
define("RFC1738_MAILTOURL", "[mM][aA][iI][lL][tT][oO]:" . RFC822_ADDR_SPEC);
|
|
|
|
// NEWS
|
|
define("RFC1738_GROUP", RFC1738_ALPHA . "[A-Za-z\\d\\-\\.+_]*");
|
|
define("RFC1738_ARTICLE", "(?:" . RFC1738_UCHAR . "|[;\\/?:&=])+@" . RFC1738_HOST);
|
|
define("RFC1738_GROUPPART", "(?:\\*|" . RFC1738_GROUP . "|" . RFC1738_ARTICLE . ")");
|
|
define("RFC1738_NEWSURL", "[nN][eE][wW][sS]:" . RFC1738_GROUPPART);
|
|
|
|
// NNTP
|
|
define("RFC1738_NNTPURL", "[nN][nN][tT][pP]:\\/\\/" . RFC1738_HOSTPORT . "\\/" . RFC1738_GROUP . "(?:\\/\\d+)?");
|
|
|
|
// TELNET
|
|
define("RFC1738_TELNETURL", "[tT][eE][lL][nN][eE][tT]:\\/\\/" . RFC1738_LOGIN . "\\/?");
|
|
|
|
// WAIS
|
|
define("RFC1738_DATABASE", RFC1738_UCHAR . "*");
|
|
define("RFC1738_WTYPE", RFC1738_UCHAR . "*");
|
|
define("RFC1738_WPATH", RFC1738_UCHAR . "*");
|
|
define("RFC1738_WAISDATABASE", "[wW][aA][iI][sS]:\\/\\/" . RFC1738_HOSTPORT . "\\/" . RFC1738_DATABASE);
|
|
define("RFC1738_WAISINDEX", "[wW][aA][iI][sS]:\\/\\/" . RFC1738_HOSTPORT . "\\/" . RFC1738_DATABASE . "\\?" . RFC1738_SEARCH);
|
|
define("RFC1738_WAISDOC", "[wW][aA][iI][sS]:\\/\\/" . RFC1738_HOSTPORT . "\\/" . RFC1738_DATABASE . "\\/" . RFC1738_WTYPE . "\\/" . RFC1738_WPATH);
|
|
define("RFC1738_WAISURL", "(?:" . RFC1738_WAISDOC . "|" . RFC1738_WAISINDEX . "|" . RFC1738_WAISDATABASE . ")");
|
|
|
|
// PROSPERO
|
|
define("RFC1738_FIELDNAME", "(?:" . RFC1738_UCHAR . "|[?:@&])*");
|
|
define("RFC1738_FIELDVALUE", "(?:" . RFC1738_UCHAR . "|[?:@&])*");
|
|
define("RFC1738_FIELDSPEC", ";" . RFC1738_FIELDNAME . "=" . RFC1738_FIELDVALUE);
|
|
define("RFC1738_PSEGMENT", "(?:" . RFC1738_UCHAR . "|[?:@&=])*");
|
|
define("RFC1738_PPATH", RFC1738_PSEGMENT . "(?:\\/" . RFC1738_PSEGMENT . ")*");
|
|
define("RFC1738_PROSPEROURL", "[pP][rR][oO][sS][pP][eE][rR][oO]:\\/\\/" . RFC1738_HOSTPORT . "\\/" . RFC1738_PPATH . "(?:" . RFC1738_FIELDSPEC . ")*");
|
|
|
|
?>
|