PHP或HTML形式搞乱了字符串格式

时间:2014-01-18 14:07:00

标签: javascript php html string forms

我正在遇到一些奇怪的行为,当你把(从JavaScript生成)到(在HTML表单中提交表单)到(在PHP中回显)。一代:

function constructCanvasString(){                   

    //<table> added later, when title and artist name is available.
    var canvasString = '';

    for (var y = 0; y < height; y++) {
        canvasString += "<tr>";
        for (var x = 0; x < width; x++) {
            canvasString += "<td x='" + x + "' y='" + y + "' style='background-color: " + $("#" + x + "-" + y).css('background-color') + "'></td>";
        }
        canvasString += "</tr>";
    }    
    canvasString += "</table>";
    console.log(canvasString);
    document.getElementById('canvasstring').value = canvasString;
}

console.log(canvasString);返回td看起来像这样的代码:

<td x='23' y='4' style='background-color: rgb(0, 0, 255)'></td>
<td x='24' y='4' style='background-color: transparent'></td>

字符串被赋予表单字段。表格如下:

<form id="publishform" method="POST" action="publish-canvas.php">
        <input type="text" name="title" value="Title"> by 
        <input type="text" name="artist" value="Artist">
        <input type='hidden' id="canvasstring" name='canvasstring' value=''>
        <input type="submit" id="publishbutton" value="Publish">
</form>

然后将表单信息传递给publish-canvas.php,它包含以下代码:

<?php

$title = $_POST['title'];
$artist = $_POST['artist'];
$canvasstring = $_POST['canvasstring'];
$canvasstring = "<table id=\"" . $title . "_by_" . $artist . "\" title=\"" . $title . "_by_" . $artist . "\">" . $canvasstring;
echo $canvasstring;

?>

在那个页面上,td看起来像是这样,搞砸了我仔细的格式化:

 <td transparent\'="" style="\'background-color:" y="\'0\'" x="\'2\'"></td>
 <td 0)\'="" 255,="" rgb(255,="" style="\'background-color:" y="\'0\'" x="\'3\'"></td> 

这发生在哪里,我该如何阻止它?

1 个答案:

答案 0 :(得分:0)

我会说问题发生在第一步,当你在javascript中生成html并将其放入输入框时。你在输入框中放置了真实的 - 未转义的 - html,这会弄乱页面的html。你看到的结果可能是浏览器试图纠正它。

您需要在javascript函数中生成转义的html并将其放在输入框中。所以没有<个字符,只有&lt;,没有>但是&gt;等等。

您可以直接在javascript中更改它,也可以使用function from an answer here on SO