如何从字符串中去掉HTML并设置字符限制?

5
我从一个项目列表中获取了一个字符串,该字符串目前显示为“item.ItemDescription”(下面第9行)。
我想要从此字符串中删除所有 HTML,并在剥离HTML后设置字符限制为250。
有没有简单的方法可以做到这一点?
我看到有帖子说要安装HTML Agility Pack,但我正在寻找更简单的方法。 编辑:
它并不总是包含HTML。如果客户想要在描述中添加粗体或斜体标签,例如<"strong">Item Name<"/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>

你是说 item.Description 包含类似 <input type="text" value="blah blah blah" /> 的值? - T McKeown
看起来会是这样的 <td> "blah blah blah"</td>,但实际上它包含的值是“yes”。 - Veda99817
@Veda99817,你可以从 item.ItemDescription 中获取字符串,并将 maxlength 属性应用于该元素,或者在生成该字符串的后端设置此属性。 - pratikpawar
它并不总是包含HTML。如果客户想要在描述中为某个项目名称添加粗体或斜体标签,例如<strong>项目名称</strong>,那么它将显示出来。我想无论如何都要剥离所有的HTML。 - Veda99817
@Veda99817,你可以使用正则表达式从下面的答案中替换所有HTML代码。现在,要将限制设置为250,你可以参考Tims答案中的substring部分,或者像McKeown指出的那样与td上的CSS结合使用。 - pratikpawar
显示剩余8条评论
3个回答

0

在我看来,你最好的选择是不要陷入解析所有可能值的噩梦中,为什么不直接将 class=someCssClassName 注入到 <td> 中作为属性。然后使用 CSS 控制长度、颜色等。

更好的方法是将一个 class 分配给包含的 <tr class=trClass>,然后让 CSS 应用于子元素 <td> 的长度。


1
将CSS应用于td tr不起作用。 item.desc包含带有input元素的HTML字符串。我相信OP正在使用table进行布局。需要在input元素上添加class。 - pratikpawar

0

这个正则表达式将选择任何HTML标签(包括带有双引号的标签,例如<"strong">):

<[^>]*>

请看这里:http://regexr.com/3cge4

使用C#正则表达式去除HTML标签

从那里,您可以简单地检查字符串大小并适当地显示。

var itemDescriptionStripped = Regex.Replace(item.ItemDescription, @"<[^>]*>", String.Empty);
if (itemDescriptionStripped.Length >= 250)
    itemDescriptionStripped.Substring(0,249);
else
    itemDescriptionStripped;

0
你可以尝试以下代码从字符串中去除所有标签(包括起始标签、结束标签和自闭合标签),但可能会无意中移除用户输入的内容,而这些内容本不应被视为 HTML 标签:
text = Regex.Replace(text, "<\/?[^>]*\/?>", String.Empty);

相反,我建议使用类似这样的方式,并让用户知道不支持HTML:

text = text.Replace("<", "&lt;");
text = text.Replace(">", "&gt;");

在转换之前,请记得检查您的250个字符限制:

text = text.Substring(0, 250);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接