HTTPmodule - 替换标记

时间:2011-01-31 02:49:26

标签: regex httpmodule

我创建了一个HTTPModule,它是为我网站的每个请求调用的。在模块内部,我为HTTPApplication.Context.Response.Filter创建了自己的过滤器包装器,它允许我在将标记发送回客户端之前对其进行操作。

这里的想法是,我将搜索某些单词/短语,并用给定语言中的相同单词/短语替换它们,这些单词/短语将存储在数据库中。

我要替换的一个词是“密码”。问题是标记中有一些名为_ctl122_txtPassword的控件,当我在我的过滤器中时,我实际上只是在进行字符串操作(搜索/替换等),因此控件名称被重命名为_ctl122_txtTranslation,这会打破各种各样的事情。 / p>

所以我不想在这里替换匹配:     <input type="password" style="width: 200px;" class="formfield" id="_ctl22_txtPassword" name="_ctl22:txtPassword">

但我确实想要替换匹配: <td align="right" class="formlabel">Password:</td>

我尝试了一些RegEx解决方案,但我远离RegEx忍者,所以这可能是要走的路,但我不太了解它们。

我尝试的唯一其他选择实际上是替换字符串'&gt;密码'。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于HTML的性质,编写一个可以处理每个案例的正则表达式很难。

您可以将此作为起点

http://snook.ca/archives/active_server_pages/vbscript_code_t

更好的解决方案可能是使用HTML解析工具(Html Agility Pack)

http://social.msdn.microsoft.com/Forums/en/regexp/thread/3b0a595b-cd09-446f-bbcb-d826511c364e

如果我要这样做(听起来像一个多语言网站),我可能会使用资源文件

或许已经定义了宏边界,这样我的正则表达式就可以轻松找到它。

例如使用@@的

<td align="right" class="formlabel">@@Password@@:</td>