Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Zend_视图中的文本电子邮件模板丢失换行符_Php_Email_Zend Framework_Templates - Fatal编程技术网

Php 使用Zend_视图中的文本电子邮件模板丢失换行符

Php 使用Zend_视图中的文本电子邮件模板丢失换行符,php,email,zend-framework,templates,Php,Email,Zend Framework,Templates,我正在使用Zend_View模板文本电子邮件内容。然而,我遇到了一个我无法解决的问题:如果一行以php块(?>)结尾,那么换行符就丢失了 有人知道我怎么解决这个问题吗 应用程序正在使用Zend framework,但我没有特别的理由使用Zend_View来呈现电子邮件模板(除了它看起来是最简单、最明显的方式),所以如果有其他解决方案,那就好了 我试着检查原始文本输出,换行符完全丢失了。看不到“\r”或“\n”,因此没有可以替换的内容 发送电子邮件的代码: $emailView = new Zen

我正在使用Zend_View模板文本电子邮件内容。然而,我遇到了一个我无法解决的问题:如果一行以php块(?>)结尾,那么换行符就丢失了

有人知道我怎么解决这个问题吗

应用程序正在使用Zend framework,但我没有特别的理由使用Zend_View来呈现电子邮件模板(除了它看起来是最简单、最明显的方式),所以如果有其他解决方案,那就好了

我试着检查原始文本输出,换行符完全丢失了。看不到“\r”或“\n”,因此没有可以替换的内容

发送电子邮件的代码:

$emailView = new Zend_View(); $emailView->setScriptPath( realpath (FRONTEND_APPLICATION_PATH .'/../email/') ); $bodyText = $emailView->render('recruitment-job-alert-text.phtml'); // $model = new Model_VacancyDetail(); // $model->find(1); // $emailView->vacancyDetail = $model; $mail = new Zend_Mail(); $mail->setSubject( 'Job Alert: ' . $model->references['vacancy_type'] ); $mail->addTo($fromEmail, $fromName); $mail->setFrom( $fromEmail, $fromName ); $mail->setBodyHtml( $bodyHtml ); $mail->setBodyText( $bodyText ); $mail->send(); $emailView=new Zend_View(); $emailView->setScriptPath(realpath(前端应用程序路径./../email/); $bodyText=$emailView->render('recruption-job-alert-text.phtml'); //$model=新车型_vacancydeail(); //$model->find(1); //$emailView->vacancydeail=$model; $mail=new Zend_mail(); $mail->setSubject('Job Alert:'。$model->references['Emptance_type']); $mail->addTo($fromEmail,$fromName); $mail->setFrom($fromEmail,$fromName); $mail->setBodyHtml($bodyHtml); $mail->setBodyText($bodyText); $mail->send(); 电子邮件模板内容:

Title: <?= $this->escape($this->vacancyDetail->references['vacancy_type']) ?> Location: <?= $this->vacancyDetail->references['name'] ?> Department: <?= $this->vacancyDetail->references['department_name'] ?> Require Driving Licence: <?= ( $this->vacancyDetail->requireDrivingLicence == 1 ) ? 'Yes' : 'No' ?> Working Hours: <?= $this->vacancyDetail->workingHours ?>. Benefits: <?= $this->vacancyDetail->benefits ?>. Salary: <?= $this->vacancyDetail->salary ?>. Details: <?= strip_tags($this->vacancyDetail->description) ?> Apply now at http://www.example.com/recruitment 标题: 地点: 部门: 申请驾驶执照: 工作时间:。 好处:。 薪金:。 细节: 现于http://www.example.com/recruitment 生成的电子邮件内容示例:

Title: Example Vacancy Type Location: Example LocationDepartment: Example DepartmentRequire Driving Licence: YesWorking Hours: 40. Benefits: Company car. Salary: £15,000pa. Details: This is an example position. It does not really exist. Apply now at http://www.example.com/recruitment 标题:空缺类型示例 地点:示例地点部门:示例部门需要驾驶执照:是工作时间:40。 福利:公司用车。 工资:15000英镑/年。 细节: 这是一个例子。它实际上并不存在。 现于http://www.example.com/recruitment
我相信这是PHP在?>之后吃掉了新线。一般来说,这是一件好事,但我能理解为什么在你的情况下这很烦人

您可能需要执行以下操作:

Title: <?= $this->escape($this->vacancyDetail->references['vacancy_type'])."\n" ?>

Location: <?= $this->vacancyDetail->references['name']."\n" ?>
Department: <?= $this->vacancyDetail->references['department_name']."\n" ?>
标题:
地点:
部门:
编辑:

这里有一个参考,只是为了确认我没有发疯:

为什么这是件好事?想象一下,您的电子邮件模板是:

Title: <?= $this->escape($this->vacancyDetail->references['vacancy_type'])."\n" ?>

<?php if (!empty($this->vacancyDetail->references['name'])) { ?>
Location: <?= $this->vacancyDetail->references['name']."\n" ?>
<?php } ?>
Departments:
<?php foreach ($this->vacancyDetail->references['departments'] as $dept) { ?>
<?=$dept->name."\n"?>
<?php } ?>
标题:
地点:
部门:
在这种情况下,您不希望在实际输出的每一行之间都有几个换行符(我最近在一个非PHP项目的电子邮件模板中遇到了这个问题)


您的另一个选择可能是不将模板存储在PHP中,只需对变量使用{name}、{department_name}或类似的代码,然后将它们解析出来

我认为只有3种选择

1-按照Tim的建议执行并添加额外的“\n”

2-在?>的末尾添加一个空格:

Title: <?= 'xxx' // NO SPACE here >>> ?>
Location: <?= 'loc' // SPACE HERE >>> ?> 
Department: <?= 'RIAA' ?>
3-添加第二个换行符,即:

Title: <?= 'xxx' // NO EXTRA newline >>> ?>
Location: <?= 'loc' // EXTRA HERE >>> ?>

Department: <?= 'RIAA' ?>
我知道这很糟糕,但你能做的事情不多。您可以告诉其他使用您的系统的开发人员,我相信他们会理解这是PHP的一个限制


PHP之所以这样做,是因为通常PHP用于HTML文件,并且它不需要所有可能导致HTML文件出现问题的额外换行符。如果您处理的是纯文本,那么您必须准备好实现一些特殊的功能,因为在处理计划文本和脚本语言时,您会遇到许多奇怪的问题。

电子邮件是否没有显示换行符,或者在PHP脚本查看时,文本中是否没有换行符?i、 e var_dump($bodyText);死亡在脚本中执行此操作,然后查看源代码,换行符是否仍然存在?如果是这样,那么是邮件部分将其删除,否则就是zend_视图。视图呈现后,它们不在其中,而是在它们放入zend_邮件之前,因此zend_视图或php本身似乎存在问题(没有查看zend_视图如何呈现文件),我不希望使用此方法。这个项目是一个其他开发人员将要使用的框架,所以我不需要只适用于特定情况的代码。如果可能的话,我希望模板文件中的换行符===结果电子邮件中的换行符。坦率地说,我不认为仅仅因为换行符出现在?>之后,PHP就不必要地吃换行符是一件好事(除非它们出现在文件的最后——但这应该是一种特殊情况,而不是规则)。我根据您的评论将我的回答扩展了一点。我认为这只是其中的一种,在大多数情况下,当你甚至没有注意到的时候,这是很方便的,但在这种情况下,这并不理想。有时,当您查看非PHP网站的HTML源代码时,会看到大量的换行符——这就是原因!我的编辑器会修剪尾随的空格,因此我在行的末尾使用了一个。
Title: <?= 'xxx' // NO EXTRA newline >>> ?>
Location: <?= 'loc' // EXTRA HERE >>> ?>

Department: <?= 'RIAA' ?>
Title: xxxLocation: loc
Department: