我会推荐@jeroen 的解决方案,因为它利用 PHP 的原生函数来处理 JSON。
但是,既然你问了,我感觉你并不完全理解为什么你的解决方案不起作用。
正如@B001 在 cmets 中已经指出的那样,您需要 "\\n" 来完成此任务:
$trimmed = str_replace("\\n", "", $response);
原因是,当“\\n”代表字符串“\n”时,“\n”代表换行符。
试试下面的代码,你会发现区别
print("-----");
print("\n");
print("-----");
print("\\n");
print("-----");
print("\"");
这将导致以下输出:
-----
-----\n-----"
这样做的原因是代码中“\”字符的每个实例都以控制字符开头。例如,“\n”表示换行符,“\r”表示回车,“\t”表示制表符,“\”表示由“”定义的字符串中的“-字符”,“\\”表示实际的反斜杠-字符。
因此,如果您想创建包含 \n 的实际字符串,您必须告诉解释器您实际上想要的是 \-字符,而不是由 \ 创建的控制字符以及后面的任何字符。这是通过使用双反斜杠“\\”来完成的,它是实际反斜杠字符串的字符串表示。这就是所谓的“转义”。
在您的情况下,您的 $response 变量中有实际的字符串,因此您必须使用转义字符作为模式。
最后让我解释一下“\n”和“\n”的区别。
PHP中有两种创建字符串的方法:
$str1 = "hello \n world\n";
$str2 = 'hello \n world\n';
print($str1);
print($str2);
这两个变量都将包含一个字符串,但是,“-string 向 PHP 解释器指示应该解释所包含的字符串,而 '-string 则按原样为您提供字符串。上面的示例将因此导致以下输出:
hello
world
hello \n world\n
这表明以下代码也将删除您的字符串中的 \n 实例,因为 '\n' 将包含实际字符串而不是控制字符:
$trimmed = str_replace('\n', "", $response);
“-string”的这种解释甚至允许将变量插入到字符串中:
$name = "Daniel";
$age = 18;
$sentence = "My Friend $name is $age years old.";
print($sentence);
会导致:
My Friend Daniel is 18 years old.