导入带引号的PHP字符串

导入带引号的PHP字符串,php,expressionengine,Php,Expressionengine,因此,我将ExpressionEngine字段导入到php数组中。我想显示一个名为{gearboxx_body}的字段,除非该字段超过300个字符,在这种情况下,我想显示一个名为{article_blurb}的字段。我很确定,仅仅在ExpressionEngine字段和条件中是没有办法做到这一点的,所以我尝试了一些PHP,我刚刚开始学习: <?php $info = array('{gearboxx_body}','{article_blurb}'); if(mb_strle

因此,我将ExpressionEngine字段导入到php数组中。我想显示一个名为{gearboxx_body}的字段,除非该字段超过300个字符,在这种情况下,我想显示一个名为{article_blurb}的字段。我很确定,仅仅在ExpressionEngine字段和条件中是没有办法做到这一点的,所以我尝试了一些PHP,我刚刚开始学习:

<?php 

  $info = array('{gearboxx_body}','{article_blurb}');

  if(mb_strlen($info[0]) <= 300) 
    echo($info[0]);
  }

  else {
   echo($info[1]);
  }

?>

这很好,但有个问题。如果标记包含任何撇号或引号,则它将结束字符串,页面将不会加载。那我该怎么办呢?我试图替换字符串中的引号,但是我必须先从字段中加载字符串,一旦我这样做,页面就已经被破坏了


希望这是有道理的。有什么建议吗?

我建议您在EE插件中而不是在模板中处理此问题:

  • 渲染速度更快(因为在模板中不需要PHP的开销)
  • 更安全可靠
  • 一旦你掌握了EE开发的基本知识,这是一项很有用的生活技能,你就可以更快地开发
  • 全方位最佳实践
我心目中的插件有三个参数:

正文、简介和字符限制

假设您将插件称为“Blurby”。在模板中,您只需要以下内容:

{exp:blurby body="{gearboxx_body}" blurb="{article_blurb}" char_limit="300"}
它根据插件本身中定义的逻辑,可变地返回任意一个字段


或者,在将变量传递到数组之前,可以使用可怕的语法设置变量:

$body = <<<EOT
{gearboxx_body}
EOT;

$blurb = <<<EOT
{article_blurb}
EOT;

$body=不确定我是否遵循。你说的
标签是什么?我假设
字符串
$info[0]
?听起来你已经试过了,比如说我对程序员不够了解,无法创建插件。我也许能弄明白,但这只是一个相当小的项目的一个非常小的领域。如果字段中有引号,您能推荐一种简单的小方法来防止页面中断吗?也许您需要PHP的
addslashes()
函数?我想这是你的答案。EE的解析顺序在这里是个问题,也是OP遇到的问题。一种解决方案是使用插件标记对,例如{exp:blurby length=“300”}{my field}{/exp:blurby}。然后让插件根据长度参数返回true/false。作为补充,我今天在另一个地方碰巧遇到了同样的问题。这一次,它不是比较两个字段的长度,而是将一个字段放入一个html属性中,引号将其搞乱。这次herdoc不起作用,因为只要输出中有任何时间的引号,该属性就以引号结束。它并没有像这一个那样破坏页面,只是真的很烦人