PHP输出含引号与撇号的字符串及复杂echo代码修正求助
嘿,搞定PHP引号嵌套的两个问题!
问题1:如何输出同时包含双引号和单引号的字符串字面量?
这里有几种实用的方法,根据你的场景选就行:
- 转义字符法:用反斜杠
\转义和外层包裹相同类型的引号。比如用单引号包裹字符串时,转义内部的单引号;双引号包裹时转义内部的双引号:// 单引号包裹,转义内部单引号 echo 'My friend said "Let\'s go!" this morning.'; // 双引号包裹,转义内部双引号 echo "She yelled: \"Don't touch that!\""; - 混合引号包裹法:如果字符串里某一种引号更多,就用另一种引号包裹整个字符串,内部的同类型引号不用转义:
// 字符串里单引号多,用双引号包裹 echo "I'm learning PHP, it's \"awesome\"!"; // 字符串里双引号多,用单引号包裹 echo 'The sign read "No Entry" — but he didn\'t care.'; - Heredoc/Nowdoc语法:适合长字符串或者复杂内容,完全不用转义引号,可读性拉满:
// Heredoc:会解析变量,适合带动态内容的字符串 $name = "Alice"; $longStr = <<<CONTENT $name said: "I can't believe how easy this is!" She smiled and waved. CONTENT; echo $longStr; // Nowdoc:加单引号,完全按字面量输出,不解析变量 $staticStr = <<<'CONTENT' He said "I'm not sure" and walked away. CONTENT; echo $staticStr;
问题2:修正混乱的echo代码
先看你这段代码的核心问题:引号嵌套冲突,onclick属性里的单引号和外层的引号撞在一起了,导致语法错误。我给你三种修正后的写法,选你看着舒服的来:
写法1:单引号包裹整个HTML,转义内部单引号
echo '<td style="text-align: center"><a onclick="window.open(\'/edit.php?id=' . $row['id'] . '\', \'_self\')"><img height="30" width="30" src="/wp-content/themes/sparkling/edit.png"/></a></td>';
解释:整个echo用单引号包裹,所以HTML属性里的双引号直接用;onclick里的单引号要加\转义,避免和外层的单引号冲突。
写法2:双引号包裹整个HTML,解析变量更方便
echo "<td style='text-align: center'><a onclick=\"window.open('/edit.php?id={$row['id']}', '_self')\"><img height='30' width='30' src='/wp-content/themes/sparkling/edit.png'/></a></td>";
解释:用双引号包裹整个字符串,变量$row['id']可以用{$row['id']}直接解析;HTML属性用单引号,onclick里的双引号加\转义,内部单引号正常使用。
写法3:Heredoc语法,最清晰易读
echo <<<HTML <td style="text-align: center"> <a onclick="window.open('/edit.php?id={$row['id']}', '_self')"> <img height="30" width="30" src="/wp-content/themes/sparkling/edit.png"/> </a> </td> HTML;
解释:这种写法完全不用纠结引号转义,代码结构一目了然,后期维护也方便,强烈推荐给复杂的HTML输出场景!
内容的提问来源于stack exchange,提问作者Martin Švejda
相关产品推荐
相关产品推荐

