2014-01-07 194 views
1

我在PHP上读取字符串文档,发现单引号字符串几乎可以完全“按原样”显示内容。变量和最转义序列不会被解释除了\”和\\双引号内的单引号

我想显示其地址的超级链接应该http://localhost/kk/insert.php/?id="4"

我尝试下面的代码

$id = 4; 
echo "<a href='http://localhost/kk/insert.php/?id=".$id."'>edit</a>"; 

但它显示http://localhost/kk/insert.php/?id=4 (周围没有双引号4)

不过,我用

完成了结果

我的问题是,单引号解释\“转义字符。那么为什么第一个代码不显示双引号(放在单引号内)。我错过了什么?

回答

3

你不应该在整数周围有引号。您的网址应 http://localhost/kk/insert.php/?id=4 这是使用下面的代码来实现:

$id = 4; 
echo '<a href="http://localhost/kk/insert.php/?id='.$id.'">edit</a>'; 
+0

我不知道这应该是什么,但它是一个语法错误。你犯了一个错误? – Halcyon

+0

是的,我注意到了。正在修复 –

1

你处理两个语言存在。 PHP正在执行回声,并且PHP会解析/删除引号。然后是'引号,它们用于HTML中以界定href属性。

有了您的转义第二个版本:

echo "<a href='http://localhost/kk/insert.php/?id=\"$display_result\"'>edit</a>"; 
    ^--php ^--html        ^^--escaped for PHP 

通常是"之前$display_result将终止你一直呼应PHP字符串。但是由于它已被转义(\"),转义告诉PHP将该报价视为明文,而不是作为报价。所以PHP字符串继续,当这个代码实际执行,并从服务器输出,浏览器将真正看到:

<a href='http://localhost/kk/insert.php/?id="XXX"'>edit</a> 
+0

很好的解释... – superphonic

0

当您第一个例子做,只是做:

$id = 4; 

echo "<a href='http://localhost/kk/insert.php/?id=\"".$id."\"'>edit</a>"; 
1

单引号与双引号的解释区别在于:

$a = 4; 
echo '$a' . "$a"; // $a4 
// '$a' just prints `$a` 
// "$a" prints `4`, it's interpretted 
// alternatively "\$a" prints `$a` 

至于逃离。如果你的字符串分隔符是单引号,那么你不需要转义双引号,反之亦然。

$a = "don't"; 
// vs 
$a = 'don\'t'; 

$a = '"quote"'; 
// vs 
$a = "\"quote\"";