在ASP.NET MVC 5上,我有以下Facebook共享链接:
@{
var link = String.Format("http://www.facebook.com/sharer.php?s=100&p[url]={0}&p[title]={1}", "http://mysite.xyz", "This is my site");
}
<a href="@link">share in facebook</a>
当我验证生成的html时,我收到以下错误:
Bad value http://www.facebook.com/sharer.php?s=100&p[url]=http://mysite.xyz&p[title]=This is my site for attribute href on element a: Illegal character in query component.
我尝试编码如HttpUtility.UrlEncode,HttpUtility.UrlPathEncode,......
但我要么松散,要么在路径之前获取本地主机,因为有%20或页面HTML未经过验证而出现安全问题......
定义锚点的正确方法是什么?
更新
我现在正在尝试以下方法:
@{
var link = String.Format("http://www.facebook.com/sharer.php?s=100&p[url]={0}&p[title]={1}", HttpUtility.UrlEncode("http://mysite.xyz"), HttpUtility.UrlEncode("This is my site"));
}
<a href="@Html.Raw(Html.AttributeEncode(link))">share in facebook</a>
但是我无法在HTML Validator中验证这一点。我收到错误:
Bad value http://www.facebook.com/sharer.php?s=100&p[url]=http%3a%2f%2fmysite.xyz&p[title]=This+is+my+site for attribute href on element a: Illegal character in query component.
更新2
我能够解决所有社交分享链接,但有一个仍然给我一些问题。
我有以下mailto链接:
<a rel="nofollow" href="
@String.Format("mailto:?subject={0}&body={1}",
HttpUtility.UrlEncode(ViewBag.Info.Data.Title),
HttpUtility.UrlEncode(ViewBag.Info.Data.Description
+ "%0D%0A" +
ViewBag.Info.Data.Url))>Share by Email</a>
这是未经过验证的,如果我使用与社交链接相同的方法,我会收到邮件正文和主题中的所有奇怪字符。
这可以解决吗?
谢谢你, 米格尔
答案 0 :(得分:2)
您应该对查询字符串参数的值进行URL编码:
var link = string.Format(
"http://www.facebook.com/sharer.php?s=100&p%5Burl%5D={0}&p%5Btitle%5D={1}",
Url.Encode("http://mysite.xyz"),
Url.Encode("This is my site")
);
并在生成锚点时使用Html.AttributeEncode
:
<a href="@Html.Raw(Html.AttributeEncode(link))">share in facebook</a>