我有一个页面,用户在一天结束时添加他们的报告。他们点击按钮"添加报告"然后它向他们显示textarea他们需要输入报告的位置。在他们输入并保存之后,我将其发送到数据库。但在写入数据库之前,我使用此函数来转义字符:
db::$conn->real_escape_string($str);
并报告已成功保存。当我使用MySQL Workbench打开数据库表时,我在一行中看到报告,如果它包含新行,则它不会显示,但如果我将光标移到它上面,则显示工具提示,其中存在新行。
之后我需要显示报告表并启用编辑。问题是当我单击编辑按钮时,它应该显示textarea并在其中报告,但我得到空textarea。我发现它是关于逃避角色的问题。这就是我在表格中渲染编辑按钮的方式。
$report = $row['user_report'];
$report = str_replace('"', '\"', $report);
$report = str_replace("'", "\'",$report);
$report = htmlspecialchars($report, ENT_QUOTES);
$r[] = '<a onclick="$(\'#editReport\').val(\''.$report.'\'); $(\'#editComment\').attr(\'onClick\', \'EditReport('.$row['id'].'); return;\');" class="btn-action glyphicons pencil btn-info" data-toggle="modal" data-target=".bs-modal-ld"><i></i></a>';
$ r []随后被输出到输出数据,但大多数东西都是这个javascript。问题是新线,我不知道如何逃避它们。 这就是它生成HTML页面的方式。简而言之,如果报告是在没有新行的情况下编写的,那么一切正常。
<a onclick="$('#editReport').val('Fixed bugs on \"User report\" page.
Developing Transaction page.
Developing admin users page.'); $('#editComment').attr('onClick', 'EditReport(100); return;');" class="btn-action glyphicons pencil btn-info" data-toggle="modal" data-target=".bs-modal-ld"><i></i></a>
这里的新线路正在引发问题。
我输入的报告是这样的:
Fixed bugs on "User report" page.
Developing Transaction page.
Developing admin users page.
但如果我这样输入,它就有效:
Fixed bugs on "User report" page. Developing Transaction page. Developing admin users page.
编辑: 我用另一个str_replace修复它(&#34; \ n&#34;,&#34; \\ n&#34;,$ report); 它现在有效:D
答案 0 :(得分:0)
那很糟糕。相反,请考虑使用JavaScript来查找内容并获取其数据,而不是将整个内容复制到内联事件处理程序中,因为它永远不会起作用;)
答案 1 :(得分:0)
您应该使用json_encode
功能
试试这种方式
$report = json_encode($row['user_report']); // no need str_replace