【问题标题】:Will echoing html in php be likely to cause errors in the html output?在 php 中回显 html 会不会导致 html 输出出错?
【发布时间】:2017-06-03 05:59:48
【问题描述】:

我在 php 中有一个 for 循环,它一遍又一遍地回显相同的文本并通过电子邮件发送给我。我只用它来检查代码是否每天都被执行,结果是什么。

这是代码的简短版本:

for ($x = 0; $x < $max; $x++) { 

    if (strlen($var)== 9) {
            // code to send things via curl has been removed
            $thismessage = " " . $var. " some text <b>bold text</b> some text " . $var2. "<br>";
            $message = $message . $thismessage; 
    } else {
            $thismessage = "other text<br>";
            //$message = $message . $thismessage;    
           }
}

然后我将$message 发送到我的电子邮件。此 php 文件每天运行,以向有生日的客户发送 SMS。发送给我的消息基本上是一条线,说此客户 ($var) 今天过生日,并收到了此电话号码 ($var2) 的消息(粗体)。 很多时候,一切正常。一直以来,客户都会收到他们的消息,因此每个代码都在执行。令我惊讶的是,我在电子邮件中得到的结果。

通常我会得到这样的结果(这是我所期望的):

var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本一些文本 var2

但我经常会得到这样的结果:

var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些粗体文本 一些文本 var2
var1 一些粗体文本 一些文本 var2

一旦我得到这个:

var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2
var1 一些文本 粗体文本 一些文本 var2

所以看起来&lt;/b&gt; 有时会被跳过或添加一个空格,因此它不会呈现为代码。但是当它在(比如说)第 3 行被跳过时,它也会在以下所有行中被跳过。我很惊讶这似乎是随机发生的,因为这是一个for 循环,它是重复使用的相同代码,所以代码中没有错误(或者至少我认为)。

我认为 php 和 html 每次都应该按照逻辑和相同的方式进行操作。

我的问题是:

在php中回显html会不会导致html输出出错? 还是我只是做错了什么?

编辑这是代码的长版本

for ($x = 0; $x < $fjoldi; $x++) { 
    $kennitala = $complete[$x][kennitala]; 
    if (strlen($kennitala)== 9) {
        $kennitala = "0" . $kennitala;
    }
    if (substr($kennitala, 0, 4) == date("dm")) {
            $simanumer = $complete[$x][simi]; 

                $url = 'https:....';
                $url = $url . '&T=Text to send'; 
                $url = $url . '&unicode=1'; 
                $execute = curl_init();
                curl_setopt($execute, CURLOPT_URL, $url);
                curl_exec($execute);
                curl_close ($execute);

            $thismessage = " " . $kennitala . " á afmæli í dag og <b>fékk sms</b> í númer " . $simanumer . "<br>";
            echo $thismessage;
            $message = $message . $thismessage;


    } else {
        $thismessage = " " . $kennitala . " á ekki afmæli í dag og fær ekki sms í númer " . $complete[$x][simi] . "<br>";
        echo $thismessage;
        //$message = $message . $thismessage;
    }
}

编辑 3 - 新信息 我刚刚注意到错误似乎总是从第 13 行开始。 php中的变量是否可能包含超过特定字符数的html代码? 我还注意到通常第一个变量包含 10 个字符,第二个包含 7 个字符,但是当一个字符添加到第一个变量的一行时,我得到了 错误。

编辑 4 我注意到我的错误总是出现在 150 个字(747 个字符)之后。我得到了超过 150 个单词的结果,一切都很好,但是我得到的错误是在 150 个单词(747 个字符)之后产生的

【问题讨论】:

  • 所以,在 PHP 中回显文本没有问题,所以你在某处做错了..!
  • 如果您的任何变量包含 HTML(即使是意外),它可能会弄乱您想要的输出。
  • 您似乎遇到了打开和关闭 &lt;b&gt; 标签不匹配的问题。查看源代码以了解发生了什么并发布任何适用代码的“长版本”。
  • 我添加了长版本的代码。变量中不应有任何 html。它们只包含数字字符串。
  • 并且变量不在&lt;b&gt;标签内或旁边

标签: php html email for-loop echo


【解决方案1】:

随着电子邮件的发送,您的问题可能会更进一步。 PHP mail function 指定 $message 参数上的每一行不得超过 70 个字符,并用 CRLF (\r\n) 分隔。如果不是这种情况,可能 mail() 正在为您执行此操作,有时 HTML 标记最终会被 CRLF 切成两半。

【讨论】:

  • 您似乎正在做某事。虽然我的行不超过 70 个字符,但我注意到我的错误总是出现在 150 个单词(747 个字符)之后。我得到了超过 150 个单词的结果,一切都很好,但是我得到的错误是在 150 个单词(747 个字符)之后产生的
  • 是的,我认为这就是解决方案。我现在不想尝试这个,因为它会向客户发送消息,但这似乎是合乎逻辑的。我会在早上得到结果。非常感谢您的帮助!
  • 我不确定是否可以将问题标记为已解决,因为这是我在这里的第一个问题。如果可以的话,请告诉我怎么做。 :)
  • 很高兴我能帮上忙!欢迎来到 Stackoverflow :) 您通过接受答案将问题标记为已解决。我的答案旁边应该有一个可点击的复选标记或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多