2015-02-05 53 views
3

以外我已创建为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>'; 

它由于某种原因,跳格之外COL-MD-5和最终显示像这样:

div

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

+0

我想这是因为警报类不继承父div的实现。你可以打开谷歌Chrome浏览器的检查元素,并检查警报分区。尝试更改警报元素的位置。像改变它到固定。但一定要添加调整,使其像中心一样填充。 – Gokigooooks 2015-02-05 14:57:09

+1

@Gokigooooks不是引导问题。 [看到这个沙盒。](http://sandbox.onlinephpfunctions.com/code/b94bcbf20774af04fcf6d4fd64a5d7949819b518)请注意,在“hello world”之前,“东西”是如何结束的。 – sjagr 2015-02-05 15:12:37

+0

是的,你是对的!但您也可以通过更改警报的引导CSS来解决此问题。但是你是更好地提出了他的问题。谢谢 – Gokigooooks 2015-02-05 15:37:05

回答

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>'; 

但是第一和第二个选项是“最佳实践” - 你不应该使用echo在函数调用,因为它会导致这些在你的问题非常的问题。

+0

是的,我在想,但mysite上的每一个字都像_ex(“”),这意味着重写了很多代码,我可以可能会结束_ex中的回声,然后再次启动它。 – 2015-02-05 14:38:11

+0

@johnsmith这是你唯一的选择。 – sjagr 2015-02-05 14:38:31

+0

@johnsmith我已经在我的编辑中添加了一些其他的选择,尽管 – sjagr 2015-02-05 14:44:22

0

尝试字符串连接远端回声最终结果是:

$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; 
+0

仍然一样,仍然移动分区之外。 – 2015-02-05 14:37:06

+0

@johnsmith我看到你更新了你的问题,是的,坚持其他答案,然后将'_ex()'函数改为'return'而不是'echo',如果你这样做的话,我会建议连接字符串直到你有得到你需要的所有部分,并只回声你想要的整个“元素”。 – caramba 2015-02-05 14:44:03

1

_ex功能替换echoreturn

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