如何最好地存储html以进行嵌入?
我能想到的唯一方法是:
使用embed html并添加<?php echo $var1; ?>
,其中id将其存储在db中并使用Eval执行它。
或
插入一个奇怪的字符组合,作为一个标记,由id替换为php。
答案 0 :(得分:4)
选项#2更安全 - 如果有人设法对您的数据库执行SQL注入攻击,他们就无法利用您的嵌入操作在服务器端执行注入的PHP。他们可能希望的最好的是网络钓鱼或XSS攻击。
另一种方法是格式化XML中的相应数据,并在数据库中存储XSLT,以将数据转换为正确的嵌入代码。对于你的情况来说,这可能有点过分,但比上述任何一种都更具可扩展性且更不容易出错。
编辑: XML版本的骨架代码
<video>
<url>http://example.com/video.flv</url>
</video>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="video">
<xsl:element name="embed">
<xsl:attribute name="src"><xsl:value-of select="url/text()" /></xsl:attribute>
<xsl:attribute name="width">500</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:transform>
// assuming the XSLT above is stored in SomeTable.transform, and the above XML has been stored in $xml_text
$xml_doc = new DOMDocument();
$xml_doc->loadXML($xml_text);
$xsl_doc = new DOMDocument();
$xsl_doc->loadXML(GetXSLT("flv"));
$processor = new XSLTProcessor();
$processor->importStyleSheet($xsl_doc);
echo $processor->transformToXML($xml_doc);
function GetXSLT($type)
{
$db = mysql_connect("user", "password", "host"); // not sure if I got the order right here, but whatever
$res = mysql_query("SELECT transform FROM SomeTable WHERE type = '$type'"); // should use parameters instead of directly embedding the type here to avoid bugs and exploits, but whatever
$array = mysql_fetch_assoc($res);
return $array['transform'];
}
关于这一点的好处是你可以创建一个类来生成输入XML,它可以包含你想传递给<embed>
标签的所有参数。如果您没有向XSLT添加处理指令来处理它们,它们将被默默地忽略。创建一个类来生成基本XML,并为每个要显示的媒体类型创建一个子类,并生成XML以传递转换应该很容易。
答案 1 :(得分:1)
为什么不直接存储11个字符的视频代码,然后在想要嵌入该视频的地方构建HTML?