【问题标题】:Where's my html tags going?我的 html 标签去哪儿了?
【发布时间】:2016-01-21 00:13:32
【问题描述】:

开始对这种形式感到沮丧。我正在向我的数据库提交 html 内容,以便存储和检索以显示在我的前端。我已经确保使用htmlspecialchars(),但是,我的所有代码在保存时都会被精简为纯文本。

我已经阅读了大量帖子,其中的问题几乎与我的相同,但没有找到合适的答案。

这是我遇到问题的代码:

<li>
            <label for="summary">Article Summary</label>
        <textarea name="summary" id="summary" placeholder="Brief description of the article" required maxlength="1000" style="height: 5em;"><?php echo htmlspecialchars( $results['article']->summary )?></textarea>

<script>  
CKEDITOR.replace( 'summary', {
   filebrowserBrowseUrl: 'wysiwyg/kcfinder/browse.php?    opener=ckeditor&type=files',
   filebrowserImageBrowseUrl: 'wysiwyg/kcfinder/browse.php?    opener=ckeditor&type=images',
   filebrowserFlashBrowseUrl: 'wysiwyg/kcfinder/browse.php?    opener=ckeditor&type=flash',
   filebrowserUploadUrl: 'wysiwyg/kcfinder/upload.php?    opener=ckeditor&type=files',
   filebrowserImageUploadUrl: 'wysiwyg/kcfinder/upload.php?    opener=ckeditor&type=images',
   filebrowserFlashUploadUrl: 'wysiwyg/kcfinder/upload.php?    opener=ckeditor&type=flash'
});
 </script>

          </li>

这是我的输入示例:

<p><img alt="" src="/wysiwyg/kcfinder/upload/images/plymouth.png" style="height:323px; width:549px" /></p>

这是输出:

pimg alt"" src"wysiwygkcfinderuploadimagesplymouth.png" style"height:323px width:549px" p

它提交到我的数据库,它被检索并显示在我的前端,只是没有 html。此外,该输出是它在数据库中的存储方式。

这里发生了什么?

编辑:请求的 php 代码。

<?php

/**
 * Class to handle articles
 */

class Article
{
  // Properties

  /**
  * @var int The article ID from the database
  */
  public $id = null;

  /**
  * @var int When the article is to be / was first published
  */
  public $publicationDate = null;

  /**
  * @var string Full title of the article
  */
  public $title = null;

   /**
   * @var string A short summary of the article
  */
  public $summary = null;

  /**
  * @var string The HTML content of the article
  */
  public $content = null;


  /**
  * Sets the object's properties using the values in the supplied array
  *
   * @param assoc The property values
  */

  public function __construct( $data=array() ) {
    if ( isset( $data['id'] ) ) $this->id = (int) $data['id'];
    if ( isset( $data['publicationDate'] ) ) $this->publicationDate = (int)     $data['publicationDate'];
    if ( isset( $data['title'] ) ) $this->title = $data['title'];
    if ( isset( $data['summary'] ) ) $this->summary =  $data['summary'];
    if ( isset( $data['content'] ) ) $this->content = $data['content'];
  }


  /**
  * Sets the object's properties using the edit form post values in the supplied array
  *
  * @param assoc The form post values
  */

  public function storeFormValues ( $params ) {

    // Store all the parameters
    $this->__construct( $params );

    // Parse and store the publication date
    if ( isset($params['publicationDate']) ) {
      $publicationDate = explode ( '-', $params['publicationDate'] );

      if ( count($publicationDate) == 3 ) {
        list ( $y, $m, $d ) = $publicationDate;
        $this->publicationDate = mktime ( 0, 0, 0, $m, $d, $y );
      }
    }
  }


  /**
  * Returns an Article object matching the given article ID
  *
  * @param int The article ID
  * @return Article|false The article object, or false if the record was not     found or there was a problem
  */

  public static function getById( $id ) {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS publicationDate     FROM articles WHERE id = :id";
    $st = $conn->prepare( $sql );
    $st->bindValue( ":id", $id, PDO::PARAM_INT );
    $st->execute();
    $row = $st->fetch();
    $conn = null;
    if ( $row ) return new Article( $row );
  }


  /**
  * Returns all (or a range of) Article objects in the DB
  *
  * @param int Optional The number of rows to return (default=all)
  * @param string Optional column by which to order the articles     (default="publicationDate DESC")
  * @return Array|false A two-element array : results => array, a list of     Article objects; totalRows => Total number of articles
  */

  public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles
        ORDER BY " . mysql_escape_string($order) . " LIMIT :numRows";

    $st = $conn->prepare( $sql );
    $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $st->execute();
    $list = array();

    while ( $row = $st->fetch() ) {
      $article = new Article( $row );
      $list[] = $article;
    }

    // Now get the total number of articles that matched the criteria
    $sql = "SELECT FOUND_ROWS() AS totalRows";
    $totalRows = $conn->query( $sql )->fetch();
    $conn = null;
    return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
  }


  /**
  * Inserts the current Article object into the database, and sets its ID property.
  */

  public function insert() {

    // Does the Article object already have an ID?
    if ( !is_null( $this->id ) ) trigger_error ( "Article::insert(): Attempt     to insert an Article object that already has its ID property set (to $this-    >id).", E_USER_ERROR );

    // Insert the Article
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "INSERT INTO articles ( publicationDate, title, summary, content     ) VALUES ( FROM_UNIXTIME(:publicationDate), :title, :summary, :content )";
    $st = $conn->prepare ( $sql );
    $st->bindValue( ":publicationDate", $this->publicationDate,     PDO::PARAM_INT );
    $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
    $st->bindValue( ":summary", $this->summary, PDO::PARAM_STR );
    $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
    $st->execute();
    $this->id = $conn->lastInsertId();
    $conn = null;
  }


  /**
  * Updates the current Article object in the database.
  */

  public function update() {

    // Does the Article object have an ID?
    if ( is_null( $this->id ) ) trigger_error ( "Article::update(): Attempt     to update an Article object that does not have its ID property set.", E_USER_ERROR );

    // Update the Article
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "UPDATE articles SET     publicationDate=FROM_UNIXTIME(:publicationDate), title=:title, summary=:summary,     content=:content WHERE id = :id";
    $st = $conn->prepare ( $sql );
    $st->bindValue( ":publicationDate", $this->publicationDate, PDO::PARAM_INT );
    $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
    $st->bindValue( ":summary", $this->summary, PDO::PARAM_STR );
    $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
    $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
    $st->execute();
    $conn = null;
  }


  /**
  * Deletes the current Article object from the database.
  */

  public function delete() {

    // Does the Article object have an ID?
    if ( is_null( $this->id ) ) trigger_error ( "Article::delete(): Attempt to delete an Article object that does not have its ID property set.", E_USER_ERROR );

    // Delete the Article
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $st = $conn->prepare ( "DELETE FROM articles WHERE id = :id LIMIT 1" );
    $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
    $st->execute();
    $conn = null;
  }

}

?>

【问题讨论】:

  • 转义或使用库可能会删除 html 代码更好的解决方案是使用 base64_encode
  • 显示从数据库中插入和检索的 PHP 代码。
  • 我添加了 php 代码。 @Barmar
  • 该代码在哪里处理发布的输入或显示结果?
  • 公共静态函数getList 使用mysql_escape_string($order)。这需要更新。 php.net/manual/en/function.mysql-escape-string.php

标签: php html forms mysqli


【解决方案1】:

好的。所以我发现了问题所在。

在 php 代码中有 preg_replace 字符串,它从我提交的内容中删除了 html 标签。删除代码后,我可以按照需要的方式存储所有内容。

需要从处理表单提交的部分中删除preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "",行,以保留html标签。

删除这一行时,一定要去掉字符串末尾多余的),否则会生成php error: unexpected ')' on line xx

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 2016-03-24
    • 1970-01-01
    • 2017-02-06
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多