PHP или HTML форма испортила форматирование строки

0

Я сталкиваюсь с каким-то странным поведением, когда жонглирование String из (генерация в 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;
}

Консоль.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> 

Где это происходит, и как мне его остановить?

Теги:
string
forms

1 ответ

0
Лучший ответ

Я бы сказал, что проблема возникает на первом этапе, когда вы генерируете html в javascript и помещаете его в поле ввода. Вы помещаете real-unescaped-html в поле ввода, и это испортит html страницы. Результат, который вы видите, вероятно, является браузером, пытающимся его исправить.

Вам нужно будет создать escaped html в вашей функции javascript и поместить его в поле ввода. Так нет < символов, а &lt; , no > но &gt; , и т.д.

Вы можете изменить это непосредственно в своем javascript, или вы можете использовать функцию из ответа здесь на SO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню