【问题标题】:HTTPmodule - Replacing MarkupHTTPmodule - 替换标记
【发布时间】:2011-01-31 02:49:25
【问题描述】:

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

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

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

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

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

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

我尝试过的唯一其他选择实际上是替换字符串“>密码”。

提前感谢您的帮助。

【问题讨论】:

    标签: regex httpmodule


    【解决方案1】:

    由于 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

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

    或者可能已经定义了宏边界,以便我的正则表达式可以轻松查找内容。

    例如@@的

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

    【讨论】:

    • 谢谢,djeeg....我通常也会使用资源文件,但有一些原因我们不能。我喜欢令牌的想法,我想我将使用一些非常原始的模式匹配。
    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2022-01-23
    • 2013-05-04
    相关资源
    最近更新 更多