javascript - 从 mySQL 渲染 HTML 以显示在页面上 Angular 和 JavaScript

标签 javascript mysql angularjs json html

我使用 Angular 作为前端,使用 Node 作为后端。我从 mySql 数据库获取数据,我在其中以文本格式手动存储数据,但上面带有 HTML 标签,即:

<ul>
   <li>item1</li>
   <li>item2</li>
   <li>item3</li>
</ul>

数据目前采用 JSON 格式,即:

{
  "data": [
    {
      "id": 1,
      "sort_order": 0,
      "content_type": "main_message",
      "heading": "Welcome to our site ",
      "content": "<ul>
                      <li>item1</li>
                      <li>item2</li>
                      <li>item3</li>
                  </ul>",
      "page_name": "home",
      "author_id": "abhatti",
      "date_created": "2017-03-13T15:12:00.000Z",
      "date_modified": "2017-03-13T15:12:00.000Z",
      "modified_by": "abhatti"
    },
    {
      "id": 2,
      "sort_order": 0,
      "content_type": "main_body_content",
      "heading": "Announcements",
      "content": "",
      "page_name": "home",
      "author_id": "Robert",
      "date_created": "2016-12-31T17:00:00.000Z",
      "date_modified": "2017-03-11T07:08:00.000Z",
      "modified_by": "Danny"
    }, 

当我将数据放入表格中时,我希望表格以 HTML 格式显示数据,但它以原始格式显示,所有 HTML 标记在页面上可见,如下所示

<ul>
   <li>item1</li>
   <li>item2</li>
   <li>item3</li>
</ul>

但我想要这样的东西

  • 项目1
  • 项目2
  • 项目3

如何正确转换数据,以便浏览器将其读取为 HTML?现在它被作为字符串放入。

最佳答案

默认情况下,AngularJS (1.2+) 会将 HTML 插入为文本。 此函数内置于 AngularJS 中,以避免 XSS 问题,但是有时(例如您此处的情况)您可能实际上希望在模板中呈现 HTML,而不是将其显示为文本。 p>

为此,请查看 AngularJS' $sce图书馆。在您的 Controller 中,您可以指定您希望信任从 MySQL 检索的 HTML 数据:

$scope.explicitlyTrustedHtml = $sce.trustAsHtml('<div><span>Hello World!</span></div>');

在您的模板中,请务必使用 ng-bind-html 进行绑定(bind):

<div ng-controller="MyController as myCtrl">
    <div ng-bind-html="myCtrl.explicitlyTrustedHtml"></div>
</div>

如果您绝对需要,可以对整个应用程序禁用$sce,但是出于安全目的,强烈不鼓励这样做。为此,请注入(inject) $sceProvider,将以下行添加到主模块的配置 block 中:

$sceProvider.enabled(false);

虽然 $sce 库很有帮助,但我的建议是找到一种更好的方法来重构 MySQL 中的数据,这样您就不会要求它提供 HTML。如果您只读取数据——从安全 Angular 来看,您可能没问题。但是,如果您允许用户从 AngularJS 应用程序发布 HTML 片段并将这些片段保留在 MySQL 中,那么您就会遭受 XSS 攻击。

关于javascript - 从 mySQL 渲染 HTML 以显示在页面上 Angular 和 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42819195/

相关文章:

mysql - C API 支持调用mysql存储过程

javascript - 从 View 发送到 Web api Controller 时,数据始终为空

javascript - 函数运行函数

javascript - 在表格内滚动(固定标题)Javascript

php - Sql高效快速搜索

javascript - RxJS 在浏览器中缺少运算符错误,但在 Visual Studio Code 中却没有

php - Laravel Eloquent ORM中如何获取插入的多行数据

javascript - 在 AngularJS 中获取基本 url

javascript - 为上一个和下一个分配图像源

javascript - Angular 与 DOJO 应用程序