通过ajax请求将html5数据从页面保存到mysql并尝试使用ajax检索它时遇到问题。触发一些 javascript 的 HTML 属性,例如
<onload>
或<iframe>
将作为<on<x>load>
和存储<if<x>rame>
在数据库中,从而在加载页面时搞砸页面。
以下是我要完成的工作的简短描述:我希望注册用户能够在我的网站上突出显示文本,并在刷新页面、重新登录等后恢复突出显示的文本。
到目前为止我所做的:我在我的服务器上实现了一个 javascript 高亮库,允许用户高亮显示文本。效果很好。
通过单击一个按钮,这些数据然后通过 jquery ajax post 保存到 mysql 中。具体代码见这里:
Javascript
$(document).ready(function() {
//saves highlighted data in var "highlighted"
$('#savehighlights').click(function() {
var highlighted = $('.tabcontent.content1').html();
//send data to server
$.ajax({
url: 'highlight.php',
type: 'POST',
data: {highlighted: highlighted},
dataType: 'html',
success: function(result) {
console.log(result);
}
});
});
将数据保存到 mysql 可以正常工作,但看起来某些命令在该过程中被禁用(例如onload
变为on<x>load
5)。数据以 longtext 和 utf8_bin 的形式存储在数据库中。我也尝试过blob,但问题仍然存在。我还尝试了使用 Ajax 的不同数据类型,例如“文本”和“脚本”。“文本”会导致同样的问题,而“脚本”根本不起作用。我也尝试了 ajax .serialize 函数,但也没有运气。
我真的不知道该怎么办,我不确定是什么导致了问题,Ajax 还是 mysql?我在网上搜索答案,包括 stackoverflow 中的许多文章(通常总是给我答案),但这次我被卡住了。要么我对此了解的不够多,无法找到正确的问题,要么这次我没有运气。因此,任何帮助将不胜感激。
我被要求添加更多信息。这里是:
我实际上是在我的本地服务器 (localhost) 上使用 XAMP 执行此操作的,所以安全问题应该不是问题,对吧?如果有任何帮助,我将在 Tiki Wiki CMS 中执行此操作。通过 ajax (highlight.php) 调用的 php 脚本如下:
require_once ('tiki-setup.php');
include_once ('lib/highlights/highlightslib.php');
$highlighted = $_POST['highlighted'];
$highlightslib->save_highlights($user, $highlighted);
highlightlib 库在这里:
if (strpos($_SERVER["SCRIPT_NAME"], basename(__FILE__)) !== false) {
header("location: index.php");
exit;
}
class HighlightsLib extends TikiLib
{
function save_highlights($user, $highlighted) {
$saveHighlights = $this->table('tiki_user_highlights');
$saveHighlights->insert
(array(
'user' =>$user,
'highlightId' =>'',
'data' =>$highlighted,
'created' =>$this->now,
)
);
return true;
}
};
$highlightslib = new HighlightsLib;