HTML标记作为HTML实体保存到数据库

时间:2015-09-15 03:06:57

标签: php html mysql utf-8 tinymce

我正在使用此代码更新数据库中的值:

function text_save( $page_name, $page_title, $page_text ) {

    $servername = "127.0.0.1";
    $username = "abcd";
    $password = "password";
    $dbname = "thedatabase";

    // Create connection
    $conn = new mysqli( $servername, $username, $password, $dbname );

    // Check connection
    if ( $conn->connect_error ) {
        die( "Connection failed: " . $conn->connect_error );
    }

    $page_content = $page_text;

    $sql = "UPDATE text SET page_title=?, page_text=? WHERE text_name=?";

    // prepare and bind
    $stmt = $conn->prepare( $sql );

    // check whether the prepare() succeeded
    if ( $stmt === false ) {    
        trigger_error( $this->mysqli->error, E_USER_ERROR );
    }

    $stmt->bind_param( 'sss', $page_title, $page_content, $page_name );

    $stmt->execute();

    print '<p>Text saved</p>';

    $stmt->close();
    $conn->close();
}

变量$page_text是从表单提交上的tinymce文本区域设置的,是HTML内容。

如果我var_dump $page_text的值,它出现为: string(23) "<p>test</p>"

$page_content数据保存到数据库时,它将保存为:

&lt;p&gt;test&lt;/p&gt;

但是,如果我手动将$page_content的值设置为     <p>test</p>,

e.g。 $page_content = "<p>test</p>";代替 $page_content = $page_text;

将其保存到数据库中:

<p>test</p>

我需要将HTML保存到数据库而不转换为HTML实体,即<p>test</p>而不是&lt;p&gt;test&lt;/p&gt;

这是我到目前为止所尝试的内容:

将页面设置为utf8 - <meta charset="utf-8" />

将表单设置为utf8 - accept-charset="UTF-8"

将连接设置为utf8 - mysqli_set_charset($conn,"utf8");

使用 - entity_encoding : "raw"

设置tinymce init

我在这里做错了什么,为什么当我手动设置变量而不是使用表单变量值(看起来相同)时,HTML字符串能够正确保存?

非常感谢!

2 个答案:

答案 0 :(得分:2)

我认为问题出在编辑器中。

你可以尝试在插入数据库之前打印$ page_content的值并向我们展示吗?

也看这篇文章。 HTML Tags stripped using tinyMCE

答案 1 :(得分:1)

您可能正在寻找html_entity_decode函数,

http://php.net/manual/en/function.html-entity-decode.php

$page_content = html_entity_decode($page_text);

小心注射等。