繁体   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