我写了一个舞者的Web应用程序,它利用Net::OpenID::Consumer
消耗进行身份验证的OpenID。它适用于Google和MyOpenID,但不适用于Yahoo。当用户试图使用他们的雅虎帐户进行身份验证,HTML::Parser
警告:如何避免使用Net :: OpenID :: Consumer与Yahoo OpenID编码错误?
Parsing of undecoded UTF-8 will give garbage when decoding entities
和此警告杀死我的应用程序(理应如此)。
我没有看到任何现有的错误与涉及到这个Net::OpenID::Consumer
(或通用)。
HTTP头和HTML的meta标签都指定UTF-8的 '声明ID' URI。
为什么会反应不能被解码为HTML::Parser
?我错过了明显的东西吗?
下面是相关代码:
get '/openid_landing' => sub {
my $params = params();
my $csr = Net::OpenID::Consumer->new(
ua => LWP::UserAgent->new(),
consumer_secret => $secret,
params => $params,
);
my $id = $params->{'openid.claimed_id'};
if (my $setup_url = $csr->user_setup_url) {
redirect $setup_url;
} elsif ($csr->user_cancel) {
redirect uri_for('/');
} elsif (my $vident = $csr->verified_identity) {
# verified identity, log in or register user
...
} else {
die "Error validating identity: " . $csr->err;
}
};
[查看你的代码(http://sscce.org),使人们可以[重现该问题(HTTP:// www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow)。 – daxim
像你这样的声音在将HTML传递给Parser之前没有对其进行解码,因此将其解码。如果这是LWP,我会说使用' - > decoded_content'而不是' - > content'。 –
user1215106,Net :: OpenId :: Common是抓取和解析HTML,而不是我的代码。 – kbosak