2014-01-18 55 views
0

我在通过(HTML格式表单提交)到(在PHP中回显)中处理(通过JavaScript生成)字符串时遇到一些奇怪的行为。代:PHP或HTML格式搞乱字符串格式化

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> 

形式信息随后被传递到发布 - 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> 

这是怎么回事,我该如何阻止它?

回答

0

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

您需要在javascript函数中生成转义html,并将其放入您的输入框中。因此,没有<人物,而是一个&lt;,没有>&gt;

你可以在你的JavaScript直接更改,或者您可以使用function from an answer here on SO