跳跃在Div之外的回声功能

时间:2015-02-05 14:32:26

标签: php twitter-bootstrap

我已经为gettext翻译创建了一个函数,该函数位于头文件中:

function _ex($text){
  echo gettext($text);
}

当我使用函数_ex(“”);它翻译了该函数中的任何文本,这很有效,但是当我在另一个函数内部使用它时,像这样的div内部:

    echo '
          <div class="row row-centered">
          <div class="col-md-3"></div>
          <div class="col-md-5">
          <div class="alert alert-danger">
          <strong>' . _ex("Oh snap!"). '</strong> You are banned. <b><u>Do not</u></b> register another account
          <br>Reason you are banned: <b><u>'.$banneduser->reason.'</u></b>
          </div>
          </div>
          </div>';

由于某种原因跳出div col-md-5并最终显示如下:

div

它正在使用其他一些文件,而不是这个。我有 ' 。 _ex(“”)。 '所以它在回声中起作用。这有什么原因,开场报价是否取消了div?是因为它被回复了两次吗?有什么办法可以在不重写我的所有代码的情况下阻止它?结束第一个回声,然后使用该函数并重新打开另一个回声?是否有一个功能,检查它是否已经回显,如果它只是返回它而不是回声?

3 个答案:

答案 0 :(得分:4)

当您在另一个_ex("Oh snap!")内拨打echo时,您正在执行此操作:

echo 'Some text' . echo 'Oh snap!' . 'more text';

这会产生不可预测的结果,因为连接的echo将首先完全执行,然后包含的echo将完成。 Demo here.将您的_ex功能更改为以下内容:

function _ex($text){
  return gettext($text);
}

并且总是这样打电话给_ex

echo _ex('Oh snap!');

或者通过连接,您现在可以根据需要使用我的答案中的第一行或您自己的代码。

保留现有代码的唯一选择是为连接语句编写新函数:

function _exx($text) {
    return gettext($text);
}

_ex函数添加另一个参数以使用上下文(类似于print_r does it的方式:

function _ex($text, $return = false) {
    if ($return) {
        return gettext($text);
    }
    echo gettext($text);
}

然后致电:

echo 'Some text' . _ex("Oh snap!", true) . ' more text';

或者重写现有的回声:

echo '
          <div class="row row-centered">
          <div class="col-md-3"></div>
          <div class="col-md-5">
          <div class="alert alert-danger">
          <strong>';
_ex("Oh snap!");
echo '</strong> You are banned. <b><u>Do not</u></b> register another account
          <br>Reason you are banned: <b><u>'.$banneduser->reason.'</u></b>
          </div>
          </div>
          </div>';

但第一和第二种选择是&#34;最佳实践&#34; - 你不应该在函数调用中使用echo,因为它会在你的问题中引起这些问题。

答案 1 :(得分:1)

echo函数中的_ex替换为return

function _ex($text){
  return gettext($text);
}

答案 2 :(得分:0)

尝试连接字符串结束echo echo结果:

$html = '
          <div class="row row-centered">
          <div class="col-md-3"></div>
          <div class="col-md-5">
          <div class="alert alert-danger">
          <strong>' . _ex("Oh snap!"). '</strong> You are banned. <b><u>Do not</u></b> register another account
          <br>Reason you are banned: <b><u>'.$banneduser->reason.'</u></b>
          </div>
          </div>
          </div>';

echo $html;