tags * in the head of HTML or XHTML documents and parses out their * attributes according to the OpenID spec. It is a liberal parser, * but it requires these things from the data in order to work: * * - There must be an open tag * * - There must be an open
tag inside of the tag * * - Only s that are found inside of the tag are parsed * (this is by design) * * - The parser follows the OpenID specification in resolving the * attributes of the link tags. This means that the attributes DO * NOT get resolved as they would by an XML or HTML parser. In * particular, only certain entities get replaced, and href * attributes do not get resolved relative to a base URL. * * From http://openid.net/specs.bml: * * - The openid.server URL MUST be an absolute URL. OpenID consumers * MUST NOT attempt to resolve relative URLs. * * - The openid.server URL MUST NOT include entities other than &, * <, >, and ". * * The parser ignores SGML comments and . Both kinds * of quoting are allowed for attributes. * * The parser deals with invalid markup in these ways: * * - Tag names are not case-sensitive * * - The tag is accepted even when it is not at the top level * * - The tag is accepted even when it is not a direct child of * the tag, but a tag must be an ancestor of the * tag * * - tags are accepted even when they are not direct children * of the tag, but a tag must be an ancestor of the * tag * * - If there is no closing tag for an open or tag, the * remainder of the document is viewed as being inside of the * tag. If there is no closing tag for a tag, the link tag is * treated as a short tag. Exceptions to this rule are that * closes and or closes * * - Attributes of the tag are not required to be quoted. * * - In the case of duplicated attribute names, the attribute coming * last in the tag will be the value returned. * * - Any text that does not parse as an attribute within a link tag * will be ignored. (e.g. will * ignore pumpkin) * * - If there are more than one or tag, the parser only * looks inside of the first one. * * - The contents of