1

通过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>load5)。数据以 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;
4

0 回答 0