mysql - хранить коды для вставки (youtube, vimeo и т. д.) - PullRequest
0 голосов
/ 01 декабря 2009

Как лучше хранить html для встраивания?

Единственное, о чем я могу думать, это:

возьмите HTML-код для вставки и добавьте <?php echo $var1; ?> туда, куда идут идентификаторы, затем сохраните его в БД и используйте Eval для его выполнения.

или

вставить странную комбинацию символов в качестве маркера для замены в php идентификаторами.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2009

Вариант №2 гораздо безопаснее - на тот случай, если кому-то удастся выполнить атаку SQL-инъекцией на вашу БД, он не сможет затем использовать вашу операцию встраивания для выполнения внедренного PHP на стороне сервера. Лучшее, на что они могли надеяться, это фишинг или атака XSS.

Другой альтернативой является форматирование соответствующих данных в XML и сохранение в базе данных XSLT для преобразования данных в правильный код для встраивания. Это, вероятно, излишнее для вашего случая, но более масштабируемое и менее подверженное ошибкам, чем любое из вышеперечисленного.

РЕДАКТИРОВАТЬ: Скелет код для версии XML

XML

<video>
  <url>http://example.com/video.flv</url>
</video>

1012 * 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 для передачи преобразований должна быть простой.

1 голос
/ 19 февраля 2011

Почему бы просто не сохранить 11-символьный видеокод, а затем создать HTML-код там, где вы хотите встроить это видео?

Смотрите это: Как встроить видео YouTube в PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...