【问题标题】:Empty TCL string resulting in non-printable character causing Project-Open to crash空 TCL 字符串导致不可打印字符导致 Project-Open 崩溃
【发布时间】:2026-01-12 14:55:01
【问题描述】:

我在 ubuntu 上安装了 Project Open。​​

只要 tcl 中有一个空字符串,那么 HTML 表单就会包含一个不可打印的字符。

什么可能导致问题?网络服务器是 openACS / AOLServer

TCL代码:set email ""(index.tcl)

ADP 代码:email="@email@" (index.adp)

HTML 输出:<input type="text" name="email" value="?"

(当我将网页保存为 htm 文件时,?在十六进制编辑器中显示十六进制代码 00 - 不确定这是否正确。 无论如何,“”之间应该没有字符作为值)

更新 1:
ADP 代码:email="t@email@t" (index.adp)
HTML 输出:<input type="text" name="email" value="tt"

所以它看起来真的是一个空字符串。这在 ADP 文件中被弄乱了。

更新 2:
根据 evil otto 的回答,这似乎是 AOL 服务器错误
如何解决?
nsd -V
AOLserver/4.5.1 (aolserver4_5)
CVS 标签:$名称:aolserver_v45_r1 $
建成:2014 年 4 月 2 日 08:27:37
Tcl 版本:8.6
平台:linux

【问题讨论】:

  • 您能提供更多细节吗?是某个 Tcl 源文件中的空字符串,还是来自用户输入或其他地方?
  • 空字符串来自tcl源文件。我试过 [string length $email] 返回 0
  • 谢谢,虽然看不到问题。 (几年前我参与了一个项目开放安装,但现在无法访问它。)
  • 我不知道可能导致问题的原因,但是 00 的十六进制表示空字符。
  • 这是一个在不了解您的设置的情况下调试的棘手问题。您能否检查 AOLserver 配置文件中的以下设置(在 ns_section ns/parameters 部分): ns_param HackContentType 1 ns_param DefaultCharset utf-8 ns_param HttpOpenCharset utf-8 ns_param OutputCharset utf-8 ns_param URLCharset utf-8

标签: string tcl openacs project-open aolserver


【解决方案1】:

在 AOLserver 的某些版本(4.5.0 到最后发布,但在 cvs HEAD 中修复)中存在一个已知错误,导致ns_quotehtml 在处理空字符串时返回无效数据。 OpenACS 检测并解决了这个错误,但有一个版本没有。

受影响版本的解决方法是将template::adp_compile 中的ns_quotehtml 更改为ad_quotehtml,在packages/acs-templating/tcl/parse-procs.tcl 中定义

http://openacs.org/forums/message-view?message_id=4078333

【讨论】:

  • 谢谢分享..这是很好的信息。不幸的是,该文件中没有 ns_quotehtml。我在 adp_compile 部分找到了{\1[ad_quotehtml [lang::util::localize ${\2}]]}
    我在template::expand_percentage_signs# TODO: ad_quotehtml找到了
  • 您提供的链接中的讨论似乎非常详细地讨论了这个问题,几乎没有提示如何解决它。但没有具体说明如何解决它。还有什么建议吗?
  • @ThorstenNiehues 这是该错误的补丁。 cvs.openacs.org/browse/OpenACS/openacs-4/packages/…
  • @*Name,非常感谢。仅替换 parse-procs.tcl 中的行没有帮助。但是替换所有 ACS 文件修复了 Prolbem。
  • 很高兴您解决了这个问题。不得不替换所有文件,这有点奇怪。