我的 html 标签去哪儿了


Where's my html tags going?

开始对这种形式感到沮丧。我正在向我的数据库提交 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;
  }
}
?>

好的。所以我想出了问题所在。

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

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

删除此行时,请确保从字符串末尾删除额外的),否则将生成php error: unexpected ')' on line xx