如何在PHP中使用双引号内的单引号?

时间:2012-03-09 02:24:33

标签: php string escaping quotes

在PHP中创建链接:

echo "<a href=\"$currentFile?rowID=$row['id']\">click here</a>";

这会引发错误:Parse error: parse error, expecting 'T_STRING' or 'T_VARIABLE' or 'T_NUM_STRING'。你怎么能这样做?

此外,混合单引号和双引号以及转义双引号会降低可读性并始终产生错误。有没有更好的方法用另一种语法创建引号,比如Ruby中的%Q()?

使用PHP 5.2.8。

6 个答案:

答案 0 :(得分:3)

问题是你的数组变量插值。语法是

"$row[id]"

"{$row['id']}"

所以:

"<a href=\"$currentFile?rowID=$row[id]\">click here</a>"

请参阅http://php.net/manual/en/language.types.string.php#language.types.string.parsing

答案 1 :(得分:3)

如果引用令人困惑,他们可以尝试使用heredoc语法:

echo <<< END_HTML
    <a href="$currentFile?rowID=$row[id]">click here</a>
END_HTML;

...只需确保 END_HTML; 独立于一行,没有缩进且没有尾随空格。在这里,heredoc有点矫枉过正。但对于包含大量变量的较大HTML块,它比在任何地方转义引号要容易得多。

PHP heredoc

干杯

答案 2 :(得分:2)

将变量包含在{}中,如{$currentFile}{$row['id']}

答案 3 :(得分:2)

sprintf是您使用变量的复杂字符串的朋友:

http://php.net/manual/en/function.sprintf.php

echo sprintf('<a href="%s?rowID=%d">click here</a>', $currentFile, $row['id']);

这里我假设$ currentFile是一个字符串(你可以进一步操作字符串,可能是urlencode)而$ row ['id']是一个整数。

答案 4 :(得分:1)

对于双引号内的命名数组,不应使用单引号:

echo "<a href=\"$currentFile?rowID=$row[id]\">click here</a>";

答案 5 :(得分:0)

为了清楚起见,我建议您在单引号中回显HTML代码,并在双引号中回显它们的标记。当其他人查看你的代码时,大量的转义引号使它看起来很复杂。

e.g

echo '<a id="testlink" alt="blabla" href="test.php?somevar='.$xy.'">Test</a>';