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