mysql - хранить коды для встраивания (YouTube, vimeo и т.д.)
Вопрос
Как лучше всего сохранить HTML-код для встраивания?
единственные способы, которые я могу придумать, это:
возьмите внедренный HTML-код и добавьте <?php echo $var1; ?>
куда идет идентификатор, затем сохраните его в базе данных и используйте Eval для его выполнения.
или
вставьте странную комбинацию символов в качестве маркера, который будет заменен в php идентификаторами.
Решение
Вариант № 2 намного безопаснее - на случай, если кому-то удастся выполнить атаку SQL-инъекцией против вашей базы данных, они не смогут использовать вашу операцию внедрения для выполнения внедренного PHP на стороне сервера.Лучшее, на что они могли надеяться, - это фишинговая или XSS-атака.
Другой альтернативой является форматирование соответствующих данных в формате XML и сохранение в базе данных XSLT для преобразования данных в правильный код для встраивания.Это, вероятно, излишество для вашего случая, но более масштабируемое и менее подверженное ошибкам, чем любое из вышеперечисленных.
Редактировать: Скелетный код для версии XML
XML - ФАЙЛ
<video>
<url>http://example.com/video.flv</url>
</video>
XSLT
<?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>
PHP
// 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 для передачи преобразований должна быть простой.
Другие советы
Почему бы просто не сохранить 11-символьный видеокод, а затем создать HTML-код везде, где вы хотите встроить это видео?
Видишь это:Как встраивать видео YouTube в PHP?