从 mysql 获取数据时,html 标记按原样显示

Posted

技术标签:

【中文标题】从 mysql 获取数据时,html 标记按原样显示【英文标题】:html tags are displaying as it is when getting data from mysql 【发布时间】:2018-03-23 00:23:39 【问题描述】:

我使用编辑器在 mysql 表中存储了一些 html 代码。它包含youtube视频的嵌入代码,因此mysql列中的条目是这样的

This is a hello text. <iframe   src="https://www.youtube.com/embed/zAlX1V3lK5s"> </iframe><br>

我正在做一个 jquery get 调用来从 mysql 获取这些数据,我使用的代码是

$.get(
     'test.php',
     function(response) 
        console.log(response);
        $('#test').html(response);
     
);

获取结果的php代码是

mysql_connect("localhost", 'root', 'root');
mysql_select_db("dummy");

$rs = mysql_query("select dummy from demotable where id = xyz");
$r = mysql_fetch_array($rs);

echo $r['dummy']; //contains that string which includes iframe too

但是当我将结果显示到 div 时,它不会在那里显示视频,而是显示字符串,因为它是我在前端 div 上得到的输出是

This is a strong beer. <iframe   src="https://www.youtube.com/embed/zAlX1V3lK5s"> </iframe><br>

我怎样才能在那里获取视频而不是显示源?

【问题讨论】:

mysql_* 自 php-5.5 起已弃用。所以改为使用mysqli_*PDO。 Why shouldn't I use mysql_* functions in PHP? 这只是一个例子,我正在使用 cake php 来做这件事,但它仍然显示字符串,而不是将嵌入代码转换为视频 【参考方案1】:

你需要把&lt;div&gt;标签也写成:

echo '<div>'.$r['dummy'].'</div>';

【讨论】:

这个问题只存在于 iframe,图像显示正确。【参考方案2】:

所以我终于找到了解决方案。我只需要用 jquery 做一个小的调整。看看下面的代码

$.get(
   'test.php',
   function(response) 
      var res = $('<div/>').html(response).text();
      $('#test').html(response);
   
);

它将解码 html 并且 iframe 将在那里。

【讨论】:

【参考方案3】:

我认为您需要强制加载 iframe。根据What’s the best way to reload / refresh an iframe?,这可以用这样的javascript来实现:

document.getElementById('some_frame_id').contentWindow.location.reload();

但在 jquery 中可能看起来像这样:

$('#test').find('iframe')[0].contentWindow.location.reload();

试试看:)

【讨论】:

这并不能解决问题。 标签也按原样显示,它应该在那里换行。所以这与php的变量有关。因为如果直接这样放 $('#test').html('This is a text. 这个问题只存在于 iframe,图像显示正确。

以上是关于从 mysql 获取数据时,html 标记按原样显示的主要内容,如果未能解决你的问题,请参考以下文章

PHP / MySQL:如何减少代码以回显选择结果(工作代码)

从 MySQL 数据库中获取带有特殊字母的字符串

MySql,传递数据读取器,关闭连接

如何修复生成的文档中不需要的 HTML 代码?

mysql 5.6:删除显式列整理

如何在纯 PHP 中获取起始 HTML 标记?