字符串中的双引号如何变为反斜杠双引号?

clipboard.png

这是支付宝的API文档。请问大佬,我想把代码中的大乐透三个字换成用变量表示,不想每次都这样写死。该怎么操作啊?如果把‘大乐透’赋给变量的话,不就带了引号了吗。而代码中的字的双引号已经被转义了。如果再加个引号会不会出错?

阅读 6.5k
3 个回答

setBizContent接收的是一个字符串,你用单引号传进去就没这问题了。
(支付宝的API文档很烂的)

"{"./*此处省略*/."\"subject\":"\"".$my_variable."\""./*继续省略*/

$my_variable 需要自己转义。

===================

‘大乐透’赋给变量的话,不就带了引号了吗

赋给变量为啥会带引号,引号只是在代码里用来区分字符串的,不是字符串值得一部分。

字符串的引号只是表示边界,并不是字符串内容的一部分。

$str1 = 'aaa';

$str1的值是aaa,不是'aaa'

$str2 = "aaa";

$str2的值也是aaa,不是"aaa"

$str1 == $str2;

上面这个表达式的结果是true,因为两个变量值都是aaa

双引号和单引号的区别,一是双引号中的可以对变量进行解析,而单引号中不行。

$str3 = 'value: $str1';
$str4 = "value: $str1";

$str3的值是value: $str1,而$str4的值是value: aaa

另一个区别是,单引号中只能转义它本身及反斜线,而双引号还能转义其他一些特殊字符。

$str5 = '\'';
$str6 = '\\';
$str7 = '\\\'';
$str8 = '\n';
$str9 = '"';

$str5的值是'(一个单引号),$str6的值是\(一个反斜线),$str7的值是\'(一个反斜线一个单引号),$str8的值是\n(一个反斜线一个n),$str9的值是"(一个双引号)。

你只要明白,转义的作用是在会引起歧义的地方,或是代表特殊字符的地方使用。

比如$str5中,如果不对单引号转义,程序就会认为它是字符串结尾,和后面的真正的字符串结尾的单引号冲突。$str6中,如果不对反斜线转义(只有一个反斜线的话),就会造成反斜线将后面的单引号转义了,从而没有了字符串结尾导致出错。而$str8中,由于反斜线不会将n转义,所以反斜线就表示它自身,不用转义。在$str9中,因为双引号在单引号中没有歧义,所以不用转义。

$str10 = "\"";
$str11 = "\\";
$str12 = "\\\"";
$str13 = "\n";
$str14 = "'";

$str10的值是"(一个双引号),$str11的值是\(一个反斜线),$str12的值是"(一个反斜线一个双引号),$str13的值是一个换行符,$str14的值是'`(一个单引号)。

可以看到和单引号是类似的,但是$str13出现了不同,因为双引号能转义更多的特殊字符,所以\n就代表了换行符。

字符串中储存的值是转义字符代表的值而不是你代码中的原始值,所以遇到在引号中引用引号不需要再次转义。

$str15 = "${str14}hello$str14";

$str15的值是"hello"$str14中的值虽然是双引号,但用在这里并不会引起歧义,所以直接使用不用担心转义问题。

前一个用花括号的原因是,如果不包起来(即$str14hello),PHP会认为这一整串都是变量名从而导致错误。花括号也可以包在外面(即{$str14})。

由于$(美元符号)在双引号中表示变量解析,所以如果要表示它也要转义(即\$)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题