我寫了一個舞者的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