我编写了几个 PHP 脚本来读取数据库的内容并将这些内容输出到电子邮件中。每隔一段时间,我会看到一个 SPACE (0x20) 字符嵌入到输出中不应该有的地方。例如,在一个脚本中,我引用了一个 PHP 全局变量,其中正好包含“n”个非空格字符,有时(并非总是),当该变量转储到电子邮件消息中时,该字符串将出现一个嵌入的空白(使字符串“n+1”的总长度)。其他时候,HTML 标记(例如 <BR>)将显示为 <BR>(注意“B”之前的空格)。
因为脚本的行为不一致(一些电子邮件受到影响,而另一些则没有),我似乎找不到问题所在。
我附上了一个 PHP 脚本的链接,该脚本偶尔会在 BREAK 标记中嵌入一个空格。我已经删除了向数据库提供特定登录信息的行。否则,其他一切都完好无损。在您可以在下面的链接中找到的代码文件中,第 281 行是包含带有嵌入式 SPACE 的 BREAK 命令的行(如上所述)。这种情况只发生过一次!
http://jem-software.com/temptest.txt
我想唯一可能相关的信息是这个脚本文件取自输入到 Joomla 中包含的 JUMI 代码块的代码!基于网站。
编辑1:
谢谢你,里卡多,你的建议。这里有一些更清楚的说明:
我没有阅读电子邮件并解析结果以插入数据库。恰恰相反,我正在从数据库中读取数据并使用结果来创建电子邮件。我将检查数据库以查看使用了什么字符集,并显式传递字符集以查看是否有区别。
我不使用 Joomla 函数来访问数据库,因为我引用的数据库在 Joomla 之外!环境。它是由几年前编写的 PHP 脚本创建的预先存在的数据库。当我使用 Joomla 重写我的旧网站时,我想完整地“移植” PHP 数据库访问代码,所以我安装了 JUMI 插件来实现这一点。
我将检查数据库中的字符编码并将其与电子邮件的字符代码同步。
我不明白字符编码问题会如何导致将空格插入硬编码的 HTML 标记中——该标记不是来自任何数据库,而是作为文字字符串输入到电子邮件中。