浏览器的行为UTF-8页面带有额外字符,如U+FFFE(ajax错误)XML解析错误:格式不正确

问题描述 投票:0回答:1

我们正在使用 PrimeFaces 开发一些 JSF Web 应用程序。

可以在

inputText
中复制/粘贴带有非 UTF-8 字符的文本,例如``(这是字符)并保存页面。但是渲染的 HTML 中有一个错误:

错误:禁止的代码点 U+fffe。

浏览器不显示(隐藏)错误,它显示非 UTF-8 字符(与正常情况下一样)!

但是,在该页面通过 Ajax 响应从服务器发送到浏览器后,浏览器在控制台中显示错误!用户可以看到错误!

控制台消息:

XML 解析错误:格式不正确

处理此错误的最佳方法是什么?

我有很多不好的想法。 :)

  1. 保存前验证输入!

    • 使用 Javascript 的客户端可以是通用的,但不安全。
    • 将不良字符替换为
      ''
      可能会导致用户误解。有很多不好的字符,比如右重音字符。
    • 我可以为 JSF 创建一个验证器,但我应该将它一一注册到所有
      inputText
      组件。
  2. 也许我可以搜索解析 Ajax 响应的 Javascript 并对其进行修补。

“最小”复制:

Github链接

  1. 下载源码
  2. mvn 干净包
  3. 下载wildfly 32.0.1.Final
  4. 将战争从项目目标复制到wildfly/standalone/deployments
  5. 开始野蝇
  6. http://localhost:8080/utf8/main.xhtml
  7. 复制粘贴不良字符后点击按钮,失败。

我认为,主要问题是Ajax使用XML。而且 UTF-8 中有很多字符在 XML 中无效。

如果有无效字符,如何在 Java 中快速检查字符串?

其他一些事情

有一些奇怪的行为。 U+0002 字符被 jsf writer 删除。

  1. 我输入 U+0002 并单击按钮
  2. 服务器端 bean 属性已设置。
  3. 但是Html编写器逻辑的renderResponse阶段已经删除了这个字符。

与U+FFFE字符是其他。我写了一个验证器,它抛出 ValidatorException,但是到了 renderResponse 阶段 U+FFFE 字符出现了。

我认为这个 mojarra bug 可能是非常相似的 bug:

https://github.com/eclipse-ee4j/mojarra/issues/4516

ajax jsf browser utf-8 xml-parsing
1个回答
0
投票

我已经转载了。这是 PrimeFaces Ajax 响应编写器中的一个错误。您需要向他们报告问题并让他们解决它。他们通常都很敏感。

我认为这个 mojarra bug 可能是非常相同的 bug:
https://github.com/eclipse-ee4j/mojarra/issues/4516

确实如此。几年前我已经为 Mojarra 实施修复了这个问题。这意味着您可以通过使用 Standard Faces Ajax 而不是 PrimeFaces Ajax 来解决这个问题。

一般语法

<p:commandButton value="Click" action="#{hello.ajax}"
    process="@form" update="@form">
</p:commandButton>

可以重写为

<p:commandButton value="Click" action="#{hello.ajax}">
    <f:ajax execute="@form" render="@form" />
</p:commandButton>

让 PrimeFaces 组件使用 Standard Faces Ajax 而不是 PrimeFaces Ajax。

也就是说,

非 UTF-8 字符

如果它确实不是 UTF-8 字符(U 代表 Unicode),它就不会列在专门介绍 Unicode 字符的网站中......;)

© www.soinside.com 2019 - 2024. All rights reserved.