转义php变量时出现问题

转义php变量时出现问题,php,Php,在getItems函数中转义PHP变量时遇到问题: while($row = mysql_fetch_array( $data )) { echo "<div class='favorite'>"; echo "<div style='display: inline;'>".$row['Item']."</div>"; if ($row['UID'] = $uid) { echo "<div id

在getItems函数中转义PHP变量时遇到问题:

while($row = mysql_fetch_array( $data )) 
    {
    echo "<div class='favorite'>";
    echo "<div style='display: inline;'>".$row['Item']."</div>";
        if ($row['UID'] = $uid) {
        echo "<div id='unlock'>Info</div>";
        } else {
        echo "<div id='unlock' onclick='getItems('".$row['Item']."')'>Unlock</div>";
        }
    echo "</div>";
    }
我做错了什么

您可以在此处看到代码:

您的问题是属性值被单引号包围,但在javascript中也使用单引号

您必须在javascript中使用双引号。但是,由于PHP中的整个字符串被双引号包围,因此必须对其进行转义。因此:

echo "<div id='unlock' onclick='getItems(\"".$row['Item']."\")' style='display: inline; float: right;'>Unlock</div>";
我想得到的是:苹果是我最喜欢的水果。然而,这是行不通的。PHP将转而寻找一个名为$names的变量,当它找不到它时,它会抱怨

因此,为了解决这个问题,我们可以将变量用大括号括起来:

$name = 'Apple';
$sentence = "{$name}s are my favorite fruit";
太好了!现在PHP将知道变量名的结尾和字符串的开头

一个旁注:您可能会考虑转换为双引号属性,因为您现在做的方式不是有效的XHTML,除非您不关心。

< P>或类似:

echo '<div id="unlock" onclick="getItems('."'".$row['Item']."'".')" style="display: inline; float: right;">Unlock</div>';
如果我必须这样做,它会看起来像:

<?php while(true) :?>
  <div class="favorite">
  <div style="display: inline;"><?php echo $row['Item'];?></div>
  <?php if ($row['UID'] = $uid):?>
    <div id="unlock">Info</div>
  <?php else: ?>
    <div id="unlock" onclick="getItems('<?php echo $row['Item']; ?>)">Unlock</div>
  <?php endif;?>
</div>
<?php endwhile;?>

是的,你的报价有问题。应该是这样的:

echo "<div id='unlock' onclick='getItems(\"".$row['Item']."\");' style='display: inline; float: right;'>Unlock</div>";
如果可能的话,用这种方式而不是回显HTML将节省大量的时间和混乱,并且您不必担心引号的所有转义,

内部onclick正在关闭onclick本身。将其更改为:

onclick='getItems(\"".$row['Item']."\")'
这样,在JS中,它使用了不同类型的引号

更好的是。。。您可以离开PHP,少担心一种类型的引用

else { ?>
    <div id='unlock' onclick='getItems("<?=$row['Item'];?>")' style='display: inline; float: right;'>Unlock</div>
<?php
}
尝试以下方法。 编辑:更改以确保正确转义引号

echo "<div id='unlock' onclick=\"getItems('{$nameArray[0]}')\" ></div>";

你能将周围的代码添加到帖子中吗?这可能是前一行的语法问题。请尝试:echo Unlock;这是一个简单的字符串。我刚刚尝试了“a”,但结果仍然是a,我将粘贴所有代码。不过,老实说,我看不出有任何问题。我得到了getItems\test\您可以在这里看到:我宁愿使用。。。我已经看过几次了,{$var}这些东西,从来没有发现它们是用来做什么的,你能告诉我吗?很好:$name=arrayfoo=>bar;echo{$name[foo]}可以用它来完成。@evildead-完全正确。这就是为什么他们称之为复杂语法;因为你可以使用复杂的变量。不是开玩笑的,我问过自己几次,第一次在php模式书中看到它,但总是懒得自己做一些研究:这是错误的!您没有注意到javascript的变量也需要引号!如果您缺少javascript变量的内部qoutes,那就足够了,我进行了更改,以更好地匹配所需内容。道歉这又错了。现在你有两次引用。浏览器无法处理此问题。在@Phil中,我自学了PHP,用echo做了所有的事情,直到我被录用,我的同事启发了我。。。lol.5000倍。很抱歉,这是一种糟糕的风格,我不建议你使用更多的打字,但它可以保存在任何地方,而不仅仅是在特定的安装上。真的吗?我甚至不知道这是一个可以被禁用的东西。我从来没有遇到过服务器不工作的情况。是的,不是开玩笑。它被称为short_open_标签,但我必须自己更正,默认值为on。也许他们改变了。从我刚刚读到的注释中:这个指令也影响了速记。。。但是一些Linux发行版在其配置中加入了其他默认值。我正在使用Debian和imho,或者他们在配置文件中禁用了短标记。但是用PHP5.4阅读时,它总是可用的。保存一些键入:
<div id="unlock" onclick="getItems('<?=$row['Item'];?>');" style="display: inline; float: right;">Unlock</div>
onclick='getItems(\"".$row['Item']."\")'
else { ?>
    <div id='unlock' onclick='getItems("<?=$row['Item'];?>")' style='display: inline; float: right;'>Unlock</div>
<?php
}
echo "<div id='unlock' onclick=\"getItems('{$nameArray[0]}')\" ></div>";