【问题标题】:Importing PHP string with quotes导入带引号的 PHP 字符串
【发布时间】:2014-09-23 17:37:34
【问题描述】:

所以我将 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]);
  }

?>

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

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

【问题讨论】:

  • 不确定我是否关注。你在说什么tag?我假设string$info[0]?听起来你已经尝试过php.net/htmlspecialchars

标签: php expressionengine


【解决方案1】:

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

  • 渲染速度更快(因为您不需要模板中的 PHP 开销)
  • 更安全可靠
  • 一旦掌握了 EE 开发的基础知识,开发速度就会更快这是一项有用的生活技能
  • 全方位最佳实践

我想到的插件需要三个参数:

正文、简介和字数限制。

假设您将插件称为“Blurby”。在模板中你会得到这个:

{exp:blurby body="{gearboxx_body}" blurb="{article_blurb}" char_limit="300"}

它会根据您在插件本身中定义的逻辑可变地返回您的任一字段。

plugin developer documentation


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

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

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

【讨论】:

  • 假设我对程序员不够了解,无法创建插件。我也许能弄明白,但这只是一个相当小的项目中的一小部分。如果字段中有任何引号,您能否推荐一种小而简单的方法来防止页面中断?
  • 也许你想要 PHP 的 addslashes() 函数? php.net/manual/en/function.addslashes.php
  • 我认为 HEREDOC 是您的答案。以上更新。
  • EE 的解析顺序在这里会是个问题,也是 OP 遇到的问题。一种解决方案是使用插件标签对 - 例如 {exp:blurby length="300"}{my-field}{/exp:blurby}。然后让插件根据长度参数返回真/假。根据expressionengine.stackexchange.com/questions/25826/…
  • 顺便说一句,我今天在另一个地方碰巧遇到了同样的问题。这次不是比较两个字段的长度,只是将一个字段放入一个html属性中,引号把它搞砸了。 HEREDOC 这次不起作用,因为只要输出中有任何时间的引号,该属性就会在引号处结束。它不会像这个那样使页面崩溃,只是真的很烦人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多