簡體   English   中英

字符串替換不適用於MySQLi獲取行結果

[英]String Replace not working with a MySQLi Fetch Row Result

PHP函數str_replace()無法使用mysqli_fetch_row()結果的輸出。 它只輸出原始字符串而沒有任何更改。

假設$row[1] = Hello \\\\r\\\\n This needs it's own line BOO.

碼:

$result = get_posts($database, $_GET['id'], $page);

while($row = mysqli_fetch_row($result)) { 
     echo str_replace('\\r\\n', '<br>', $row[1]);
}

輸出:

Hello \\r\\n This needs it's own line BOO.

但是在下面,當我附加其他字符串時,它會正確替換,但原始變量不會。

碼:

$result = get_posts($database, $_GET['id'], $page);

while($row = mysqli_fetch_row($result)) { 
     echo str_replace('\\r\\n', '<br>', $row[1].'\\r\\n For some reason I replace.');
}

輸出:

Hello \\r\\n This needs it's own line BOO. <br> For some reason I replace.

我也嘗試使用nl2br()但結果保持不變,但是,將句子本身的字符串用引號粘貼到str_replace()起作用。

我認為這與原始變量有關,我需要對其進行某種修復。 歡迎使用JQuery和Javascript作為解決方案的一部分。 如果需要更多代碼,請在注釋中請求。

我猜想這與從數據庫中提取數據的編碼有關。 更換之前,請嘗試將其編碼為UTF-8。

while($row = mysqli_fetch_row($result)) { 
    echo str_replace('\\r\\n', '<br>', utf8_encode($row[1]));
}

PHP函數str_replace()無法使用mysqli_fetch_row()結果的輸出。

不, 輸入的參數不正確 :-)

假設$row[1] = Hello \\\\r\\\\n This needs it's own line BOO.

如果那里的數據中實際上有兩個反斜杠,那么搜索表達式中也需要有相同數量的反斜杠。

現在好嗎 我們來看一下:

str_replace('\\r\\n', '<br>', $row[1]);

讓我們采用第一個參數,並輸出它:

echo '\\r\\n';

輸出: \\r\\n –哎呀,只是一個反斜線……?

反斜杠是轉義字符 ,並且要從中獲得特殊含義-即使在單引號中也要在其前面加上另一個反斜杠。 因此,這里的內容是第一個反斜杠轉義第二個反斜杠,因此在實際的已解析文本文字中留下一個反斜杠。

因此,您必須將這些反斜杠加倍 ,以使它們實際上意味着“兩個文字反斜杠”:

echo '\\\\r\\\\n';

啊,輸出\\\\r\\\\n …不太好。

因此,您實際要用於替換的是

str_replace('\\\\r\\\\n', '<br>', $row[1]);

(在這里只使用三個反斜杠也是可行的,因為第一個反斜杠會掩蓋第二個反斜杠,而第三個反斜杠將是“獨立的”,並按字面意義使用,因為在該斜杠后沒有一個字符具有特殊含義,用引號引起來的字符串。但是為了避免混淆-並且出於原則性原則-最好將它們都加倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM