PHP变量中的单引号和双引号

3

我该如何正确地组合这段代码中的所有单引号和双引号? 我尝试了几种组合,但都没有成功。 这是我的最后一次尝试,请帮忙。

在处理长字符串时,有什么好的方法吗?

$html .='<a href="" onClick="$.ajax({type: "POST",url: "delete_pic.php",data:{id:"'.$row['id'].'",var:"V"},cache: false});" style="background:url("images/icons/delete.png" 50% -19px no-repeat;width:16px;height:16px;float:left;margin-left:10px;margin-top: 6px;"></a>';

我认为问题在于style属性部分。背景图片的URL的开头引号关闭了style属性的开头引号。也许你应该遵循下面@Jeffrey的答案,将样式表分离而不是内联使用 :) - Arnelle Balane
1
这里有两个注意事项:你在url(上缺少了闭合的括号),而且尽管看起来很奇怪,但是你不需要在url周围加任何引号。 - Uberfuzzy
4个回答

3
我建议将样式移动到外部样式表中,以使其更短,并在字符串中使用 "\"\"" 来转义引号。
$html .="<a href=\"\" onClick=\"$.ajax({type: \"POST\",url: \"delete_pic.php\",data:{id:\".$row["\id\"].",var:\"V\"},cache: false});\" class=\"mystyle\"></a>";

由于我没有您的代码,因此未进行测试 :)

是的,我明白,但这只是一个创建的元素,所以我没有将它放在外部样式表中。 - user123_456
我以前也做过那个 :) 但它总是会回来咬你 :) - Jeffrey Kevin Pry

3

最好的解决方案是使用HEREDOC,它完全消除了在PHP级别上需要转义任何引号的需要:

$html .= <<<EOL
<a href="onclick('\$.ajax({ etc.....

EOL;

请注意,您仍将受到嵌入heredoc中的任何语言的引用需求的约束。但至少您不必担心因未平衡/未转义的引号而导致PHP语法错误。

1
我遵循的规则是:PHP字符串用单引号括起来,所以HTML属性要用双引号。
属性中的任何引号都必须是转义的单引号\'
$html .='<a href="" onClick="$.ajax({type: \'POST\',url: \'delete_pic.php\',data:{id:\''.$row['id'].'\',var:\'V\'},cache: false});" style="background:url(\'images/icons/delete.png\' 50% -19px no-repeat;width:16px;height:16px;float:left;margin-left:10px;margin-top: 6px;"></a>';

1

如果有必要,你应该在双引号内转义另一个双引号(如果这样说的话是有意义的)。 :)

$html .='<a href="" onClick="$.ajax({type: \"POST\",url: \"delete_pic.php\",data:{id:\"'.$row['id'].'\",var:\"V\"},cache: false});" style="background:url(\"images/icons/delete.png\" 50% -19px no-repeat;width:16px;height:16px;float:left;margin-left:10px;margin-top: 6px;"></a>';

那个(或类似的)应该可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接