【问题标题】:How to store input text value or text area value with & symbol and special characters? [closed]如何用 & 符号和特殊字符存储输入文本值或文本区域值? [关闭]
【发布时间】:2015-05-24 14:48:16
【问题描述】:

我已经检查过 htmlentities、htmlspecialchars、mysql_real_escape_string 但没有任何帮助。

我只想保存“你好,我的名字是 john,我的本地人是 chennai”

当我尝试保存时,只保存了“你好,我的名字是 john”。

如何将 & 符号从 php 表单存储到 mysql 数据库?

更新示例代码: 让输入字段像,

<input type="text" name="product_desc" />

在 php 中获取值就像

$product_description = htmlentities($_POST['product_desc']);
$product_description2 = htmlspecialchars($_POST['product_desc']);

【问题讨论】:

  • 向我们展示您尝试过的代码
  • Fred-ii- 我已经更新了示例代码。请检查。
  • 我在下面发布了一个示例脚本;修改以适应并欢迎"prepared statements" ;-)

标签: php mysql string special-characters htmlspecialchars


【解决方案1】:
  • 使用准备好的语句。请参阅下面的参考资料。

这是我使用的一个脚本(从我的一个库中提取)并且它可以工作,即使使用与号(预先测试)并确保该列是 varchar

  • 预测试成功在 DB 中输入“John & me”。

  • 您需要修改它以适应您的输入等。

-mysqli with prepared statements method

<!doctype html>
<head></head>
<title></title>

<body>
    <form action="<?php echo htmlentities($_SERVER["PHP_SELF"]); ?>" method="post">
    <p><strong>Name: </strong>
    <input name="name" type="text" width="50">     
    </p>
    <p><strong>Email: </strong>
    <input name="email" type="text" width="50" /></p>
    <p><input type="submit" name="submit" value="Submit" /></p>
    </form>
</body>
</html>

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';


$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($con->connect_errno > 0) {
  die('Connection failed [' . $con->connect_error . ']');
}

if( isset($_POST['submit']) 
    && !empty($_POST['name']) 
    && !empty($_POST['email']) ){


/* ===================== not all parts needed, modify to suit ======================= */

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$email = filter_var($email, FILTER_VALIDATE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Not a valid email
    $error_msg = '<p class="error">The email address you entered is not valid.</p>';
echo $error_msg;
exit;

}

/* ===================== not really needed, just querying ======================= */

$checkemail = mysqli_real_escape_string($con, $_POST['email']);

$query = "SELECT * FROM yourTable WHERE email = '".$checkemail."'";

$result = mysqli_query($con, $query) or die(mysqli_error($con));

if (mysqli_num_rows($result) > 0) {

   echo $checkemail . " already exists in DB";
   exit;
}

    $name = stripslashes($_POST['name']);
    $name = mysqli_real_escape_string($con, $_POST['name']);
    $email = mysqli_real_escape_string($con, $_POST['email']);

$sql = mysqli_prepare($con, "INSERT INTO yourTable 
                         (id, name, email)
                          VALUES (null,?,?)");
    $sql->bind_param("ss", $name, $email);
    $sql->execute();

if($sql){
   echo "Success!";
}

}

else{
echo "Fill in all fields.";
}

参考文献:

【讨论】:

  • 它会在已弃用的 mysql 函数中工作吗?
  • @JRameshFernandez 不,您不能将mysql_ 函数与任何其他 MySQL API 混合使用。我提供的是一个完整的解决方案,您只需将数据库连接代码中的xxx 替换为您自己的以及您表单的其他部分等。
  • @JRameshFernandez 我要离开一段时间,所以如果您有任何问题,请告诉我,我回来时看看能否帮助您。
【解决方案2】:

php 中字符串中的&amp; 字符并没有什么特别之处。

获得结果的唯一方法(&amp; 之后的所有内容都不会存储...)是当您将数据发送到您的 php 脚本并且您手动构建数据字符串而不正确编码时.

如果您使用 javascript 发出 POST 请求,则需要使用 encodeURIComponent() 对您的值进行编码,然后再将它们添加到查询字符串中。

如果您使用 php(例如 cURL)发出 POST 请求,则需要 urlencode() 正确编码该值,然后再将其添加到查询字符串。

并且要在数据库中存储具有任何类型字符的任何字符串,推荐的方法是使用带有绑定参数的准备好的语句。但是,这似乎与您的问题无关。

【讨论】:

  • 谢谢,我会尽快在我的项目中尝试。
【解决方案3】:

您是否尝试过使用 HTML 实体?

&amp; = $

关于所有实体的信息: http://www.w3schools.com/html/html_entities.asp

【讨论】:

  • OP:“我已经检查过 htmlentities、htmlspecialchars、mysql_real_escape_string 但没有任何帮助。” - 再次阅读问题。另外,&amp;amp; = $ - &amp;amp; 代表“与号”&amp;""你好,我叫 john &amp; 我的家乡是 chennai""
  • 是的,我试过了,我已经在我的问题中提到了
猜你喜欢
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 2016-05-10
  • 1970-01-01
  • 2013-12-11
相关资源
最近更新 更多