【问题标题】:ASP.NET Multiline textbox allowing input above UTF-8ASP.NET 多行文本框允许输入高于 UTF-8
【发布时间】:2010-02-07 01:39:37
【问题描述】:

在我的 web.config 我有

<globalization
  fileEncoding="utf-8"
  requestEncoding="utf-8"
  responseEncoding="utf-8"
  culture="en-US"
  uiCulture="de-DE"
/>

在我的页面指令中我有

ResponseEncoding="utf-8"

但由于某种原因,带有 TextMode="MultiLine" 的 ASP 文本框允许输入 UTF-8 之外的字符。当我将以下文本行粘贴到不是 MultiLine 的 ASP TextBox 中时

“test”

非 UTF-8 字符被替换,但在我使用多行文本框时不会。

有什么想法吗?

编辑: 为了进一步解释我看到这个问题的设置,这里有 4 个可以放在 ASP 页面上的文本区域。

<asp:TextBox ID="txtTest1" runat="server"></asp:TextBox>
<asp:TextBox ID="txtTest2" runat="server" TextMode="MultiLine"></asp:TextBox>
<input id="Text1" runat="server" />
<textarea id="Textarea1" cols="100" rows="8" runat="server"></textarea>

如果您在页面指令中使用 ResponseEncoding 制作页面,您的 web.config 使用上述全球化选项卡,然后将带有引号的测试行复制并粘贴到这 4 种不同类型的文本区域中,为什么字体有什么不同吗?

【问题讨论】:

    标签: asp.net encoding utf-8 textbox user-input


    【解决方案1】:

    只是为了添加一些说明... UTF-8 是一种字符编码方案,涵盖了所有 Unicode 字符。因此,不存在“非 UTF-8 字符”之类的东西。

    字符串的编码与屏幕上这些字符的图形表示无关(例如,在网页的 控件中)。在您的示例中,某些字体将印刷者的引号显示为直引号,而其他字体则将相同的 UTF-8 字符显示为弯引号。

    ResponseEncoding 设置确定传输哪些字节来表示构成页面 HTML 的字符以及在表单帖子和 URL 中编码的字符返回到您的页面。常见的编码是 UTF-8、ISO 8859-1 和 windows-1252。这些编码有很多相似之处,但也有不同之处。但是,您可以使用 windows-1252 字符集和编码(也包括那些花括号字符)提供完全相同的页面,并且您会看到完全相同的结果。

    所以简而言之,不要将字符编码与字体样式混淆。

    顺便说一句,您的 ResponseEncoding="utf-8" 指令是多余的,因为在 web.config 中设置了相同的内容。无论如何,UTF-8 是默认值,因此您甚至可能在 web.config 中都不需要它。

    【讨论】:

    • 谢谢迈克。我认为它们是多余的,我只是想表明我已经完成了我在研究中发现的一切。很好的解释。
    【解决方案2】:

    您看到的是应用于文本区域(多行文本框)和文本框(输入)的不同默认字体。文本区域使用 Courier New,单行文本框使用 Arial。如果您应用将字体系列设置为文本框和文本区域相同的样式,那么您粘贴的文本将匹配。试试这些,你应该会看到粘贴的内容完全匹配:

    <asp:TextBox ID="txtTest1" runat="server" style="font-family: Courier New;"></asp:TextBox>
    <asp:TextBox ID="txtTest2" runat="server" TextMode="MultiLine" style="font-family: Courier New;"></asp:TextBox>
    <input id="Text1" runat="server" style="font-family: Courier New;" />
    <textarea id="Textarea1" cols="100" rows="8" runat="server" style="font-family: Courier New;"></textarea>
    

    【讨论】:

    • 有趣的是,我原以为 web.config 级别的设置和页面指令会在 ASP 转换为 html 时将这些设置传递给所有控件。谢谢杰夫,我会试一试。
    • hmmmm... 我认为您不能在 web.config 或 Page Directive 中设置 font-family。如果您愿意,可以在全局 CSS 样式表中设置 font-family。您认为您在 web.config 中设置的哪些设置会更改文本框的字体系列?
    • 最开始的标签。这是“全球化”,它是 web.config 的一部分。我从以下 MSDN 文章中获得了该信息:msdn.microsoft.com/en-us/library/39d1w2xf.aspx
    • 全球化不驱动所使用的字体。字体严格来自页面上设置的样式(或文本框的默认样式)。显示日期或货币时,全球化将发挥作用(指定的月份、日期、年份是什么顺序,或者是用于分隔美元和美分的逗号或句点等)。用于在文本框中显示文本的字体不是来自全球化设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多