我需要匹配所有这些开始标记:
<p>
<a href="foo">
Run Code Online (Sandbox Code Playgroud)
但不是这些:
<br />
<hr class="foo" />
Run Code Online (Sandbox Code Playgroud)
我想出了这个,并希望确保我做对了.我只抓住了a-z.
<([a-z]+) *[^/]*?>
Run Code Online (Sandbox Code Playgroud)
我相信它说:
/,然后我有这个权利吗?更重要的是,你怎么看?
似乎stackoverflow上的每个问题,其中提问者使用正则表达式从HTML中获取一些信息将不可避免地有一个"答案",表示不使用正则表达式来解析HTML.
为什么不?我知道那里有引用 - 不引用"真正的"HTML解析器,比如Beautiful Soup,我相信它们是强大而有用的,但是如果你只是做一些简单,快速或肮脏的事情,那么为什么当一些正则表达式语句运行得很好时,麻烦使用如此复杂的东西?
此外,是否有一些基本的东西,我不了解正则表达式,这使得它们一般是解析的错误选择?
我使用以下方法提取文本格式html:
public string getAllText(string _html)
{
string _allText = "";
try
{
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(_html);
var root = document.DocumentNode;
var sb = new StringBuilder();
foreach (var node in root.DescendantNodesAndSelf())
{
if (!node.HasChildNodes)
{
string text = node.InnerText;
if (!string.IsNullOrEmpty(text))
sb.AppendLine(text.Trim());
}
}
_allText = sb.ToString();
}
catch (Exception)
{
}
_allText = System.Web.HttpUtility.HtmlDecode(_allText);
return _allText;
}
Run Code Online (Sandbox Code Playgroud)
问题是我也得到了脚本和样式标签.
我怎么能排除他们?
我有一个接受的控制器
public class MyModel
{
[MaxLength(400)]
public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个WebApi Post Action
public HttpResponseMessage Post(MyModel viewModel)
{
if (!ModelState.IsValid)
return new HttpResponseMessage(HttpStatusCode.BadRequest);
...
}
Run Code Online (Sandbox Code Playgroud)
并采取行动.
由于内容是通过javascript写出的,而不是直接在视图中写出来的,确切的内容都被写出来了,也没有关于危险内容的asp.net警告.
我想要防范XSS.目前我在做
HttpUtility.HtmlEncode(Regex.Replace(p.Message, @"<[^>]*>", String.Empty))
Run Code Online (Sandbox Code Playgroud)
在Get动作中.(从使用C#正则表达式删除HTML标记中获取一些代码)
我应该使用Asp.Net内置的保护措施吗?我可以用我的模型装饰任何属性吗?
我注意到了http://stephenwalther.com/archive/2012/06/25/announcing-the-june-2012-release-of-the-ajax-control-toolkit.aspx,但点击了http:// wpl. codeplex.com/似乎非常糟糕.
我正在使用MVC 3和Razor View引擎.
我想做什么
我正在使用MVC 3制作博客,我想删除所有HTML格式标签<p> <b> <i>等.
我正在使用以下代码.(确实有效)
@{
post.PostContent = post.PostContent.Replace("<p>", " ");
post.PostContent = post.PostContent.Replace("</p>", " ");
post.PostContent = post.PostContent.Replace("<b>", " ");
post.PostContent = post.PostContent.Replace("</b>", " ");
post.PostContent = post.PostContent.Replace("<i>", " ");
post.PostContent = post.PostContent.Replace("</i>", " ");
}
Run Code Online (Sandbox Code Playgroud)
我觉得必须有一个更好的方法来做到这一点.任何人都可以指导我这个.
我从一个项目列表中获取一个字符串,该字符串当前显示为"item.ItemDescription"(下面的第9行)
我想从这个字符串中删除所有 html.在删除html后设置字符限制为250.有一个简单的方法吗?我看到有帖子说要安装HTML Agility Pack,但我正在寻找更简单的东西.
编辑:
它并不总是包含html,如果客户想要在描述中的项目名称中添加粗体或斜体标签,它会显示为<"strong">项目名称<"/ strong">,例如,我想要无论输入什么,都要删除所有html.
<tbody>
@foreach (var itemin Model.itemList)
{
<tr id="@("__filterItem_" + item.EntityId + "_" + item.EntityTypeId)">
<td>
@Html.ActionLink(item.ItemName, "Details", "Item", new { id = item.EntityId }, null)
</td>
<td>
item.ItemDescription
</td>
<td>
@if (Model.IsOwner)
{
<a class="btnDelete" title="Delete" itemid="@(item.EntityId)" entitytype="@item.EntityTypeId" filterid="@Model.Id">Delete</a>
}
</td>
</tr>
}
</tbody>
Run Code Online (Sandbox Code Playgroud) 需要正则表达式从以下url中删除a标记<a href="http://example.com">Name</a>以仅输出字符串"Name".我正在使用C#.net.
任何帮助表示赞赏
我拥有一个你有状态框的在线游戏.您可以根据自己的感受更新它.我遇到的问题是用户将java脚本标记放入消息并进入状态.所以当另一个用户来到他们的页面时,会弹出一个弹出框,说哈哈或他们想要的任何东西.
然后我通过使用停止了
$status = mysql_real_escape_string($_POST['status']);
$foo = preg_replace('/[^a-z]/i', null, $status );
Run Code Online (Sandbox Code Playgroud)
这已经停止了任何JavaScript的运行,但现在当有人向某人发送消息时,它会占用空格,因此消息"你好吗"它将显示"howareyou".当然这是安全的,但用户无法读取消息.是否还有其他方法可以阻止脚本标签插入到可用但仍允许空格的情况下?
我也真的害怕有人用XSS攻击我.因为以前,我被告知用户可以在消息中输入内容然后当其他用户打开它时,它会向他们发送密码.....
我需要完全删除给定HTML代码的所有样式标记.我发现以下正则表达式匹配XML中的整个样式标记.它适用于在线正则表达式测试人员中给定的Html代码.
*style\s*=\s*('|")[^\2]*?\2([^>]*)*
Run Code Online (Sandbox Code Playgroud)
但是,通过C#代码,它不适用于给定的HTML.
以下是C#代码:
Regex regex = new Regex("style\\s*=\\s*('|\")[^\\2]*?\\2([^>]*)", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud) 我想比较2个字符串,但我只是意识到已经有一些html格式.
在执行string1 == string2时,如何让这两个字符串匹配.(注意:我不知道HTML格式是什么会提前)
string1 = "This is a test";
string1 = "<font color=\"black\" size=\"1\">This is a test</font>";
Run Code Online (Sandbox Code Playgroud) 可能重复:
使用C#正则表达式删除HTML标记
我必须删除标记并将所有其他信息保存在XML文件中.在使用正则表达式时,我有点不知所措.我只能逐行读取文件然后尝试"找到"所有标签并用""替换它们 - 空字符串.但是,它没有按预期工作:
line = Regex.Replace(line, "<.*>", "");
Run Code Online (Sandbox Code Playgroud)
我可以请一个解释为什么这不能按预期工作(我认为它应该只是找到<>内部符号的所有可能组合.另外,你能不能推荐正则表达式的一个很好的介绍.我经常看了很多-expressions.info但我发现它不完整和令人困惑.
c# ×9
html ×6
regex ×6
.net ×2
asp.net ×2
asp.net-mvc ×2
string ×2
asp.net-4.0 ×1
html-parsing ×1
mysql ×1
parsing ×1
php ×1
razor ×1
xhtml ×1