Php 如果单词之间有空格,则使用$row[";Name";]会导致引号

Php 如果单词之间有空格,则使用$row[";Name";]会导致引号,php,html,Php,Html,我想创建一个表,该表具有一个函数,当单击特定的表元素时使用该函数。它使用函数值的行名称。它适用于名称只有一个单词的事物(例如“餐”),但其多个单词(例如“自制鸡肉面条汤”),然后使用名称中不存在的引号过早地关闭该值。我想知道为什么会发生这种情况,以及是否有可能解决它 检查元素是否存在损坏的html: <tr class="tr active" id="Homemade Chicken Noodle Soup" onclick="show(&

我想创建一个表,该表具有一个函数,当单击特定的表元素时使用该函数。它使用函数值的行名称。它适用于名称只有一个单词的事物(例如“餐”),但其多个单词(例如“自制鸡肉面条汤”),然后使用名称中不存在的引号过早地关闭该值。我想知道为什么会发生这种情况,以及是否有可能解决它

检查元素是否存在损坏的html:

<tr class="tr active" id="Homemade Chicken Noodle Soup" onclick="show("Homemade" chicken noodle soup")>
<tr class="tr" id="jelo" onclick="show("jelo")">
$sql = "SELECT Name, Calories, Fat, SaturatedFat, TransFat, 
            Cholesterol, Salt, Carbohydrate, DiateryFiber,Sugar 
        FROM recepti";
$result =$db -> query($sql);
if ($result->num_rows > 0) {
    ...
    while($row = $result->fetch_assoc()){
        echo'
        <tr class="tr" id="'.$row["Name"].'" onclick=show("'.$row["Name"].'")>';
        ...
    }
    $db->close();
}

检查元素是否有正确的html:

<tr class="tr active" id="Homemade Chicken Noodle Soup" onclick="show("Homemade" chicken noodle soup")>
<tr class="tr" id="jelo" onclick="show("jelo")">
$sql = "SELECT Name, Calories, Fat, SaturatedFat, TransFat, 
            Cholesterol, Salt, Carbohydrate, DiateryFiber,Sugar 
        FROM recepti";
$result =$db -> query($sql);
if ($result->num_rows > 0) {
    ...
    while($row = $result->fetch_assoc()){
        echo'
        <tr class="tr" id="'.$row["Name"].'" onclick=show("'.$row["Name"].'")>';
        ...
    }
    $db->close();
}

元素的Php代码:

<tr class="tr active" id="Homemade Chicken Noodle Soup" onclick="show("Homemade" chicken noodle soup")>
<tr class="tr" id="jelo" onclick="show("jelo")">
$sql = "SELECT Name, Calories, Fat, SaturatedFat, TransFat, 
            Cholesterol, Salt, Carbohydrate, DiateryFiber,Sugar 
        FROM recepti";
$result =$db -> query($sql);
if ($result->num_rows > 0) {
    ...
    while($row = $result->fetch_assoc()){
        echo'
        <tr class="tr" id="'.$row["Name"].'" onclick=show("'.$row["Name"].'")>';
        ...
    }
    $db->close();
}
$sql=“选择姓名、卡路里、脂肪、饱和脂肪、TransFat、,
胆固醇、盐、碳水化合物、纤维、糖
“来自前台”;
$result=$db->query($sql);
如果($result->num_rows>0){
...
而($row=$result->fetch_assoc()){
回声'
';
...
}
$db->close();
}

问题在于你的引号。HTML非常宽容,它会尝试理解属性,即使该值没有括在引号中。但是,它只会考虑到下一个空白空间的值。 你有

onclick=show("'.$row["Name"].'")
我假设它被输出为

onclick=show("Homemade chicken noodle soup"
//                    ^ This is the first whitespace
这是无效的HTML,因此HTML将尝试猜测您的意思。它在第一个空格处加了引号;根据HTML解析规则,这是最符合逻辑的地方。字符串的其余部分被视为自定义属性,并在最后加上一个恶意引号

请参见检查器如何突出显示它:

要解决此问题,必须将
onclick
值括在另一对引号中。我使用了单引号,这是我在PHP中转义的

echo'<tr class="tr" id="'.$row["Name"].'" onclick=\'show("'.$row["Name"].'")\' >';
echo';

查看引号!!双引号字符串中不能有双引号。在双引号字符串内使用单引号,或将信息连接到字符串ID的值中,不能包含空格(空格、制表符等)Manual@RiggsFolly您的意思是行id不能包含空格、tr的id或函数中的值吗?任何html元素的
id
属性都不能包含spacesYour
onclick=“show(“自制的”鸡汤面”)
也是错误的,尽管我不知道它是如何从您显示的代码中生成的,除非
$row['name']
包含一个字符串,其中一部分已经被引用为
“自制的”“鸡汤面
谢谢,这就是问题所在。我不知道可以使用斜杠将引号设置为字符串的引号。@BottomCroat斜杠对PHP字符串中的特殊字符进行转义。当您希望引用被PHP逐字逐句地处理时,您需要对其进行转义。看见