2015-02-05 96 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); 
}