如何存储带&符号和特殊字符的输入文本值或文本区域值?
How to store input text value or text area value with & symbol and special characters?
我已经检查过 htmlentities、htmlspecialchars、mysql_real_escape_string,但没有任何帮助。
我只想保存"Hello my name is john & my native is chennai"
当我试图保存这个时,只保存了 "Hello my name is john "。
我应该如何将 php 表单中的 & 符号存储到 mysql 数据库?
更新示例代码:
让输入字段像
<input type="text" name="product_desc" />
并在 php 中获取值就像
$product_description = htmlentities($_POST['product_desc']);
$product_description2 = htmlspecialchars($_POST['product_desc']);
您是否尝试过使用 HTML 实体?
& = $
php中字符串中的&
字符没有什么特别之处。
获得结果的唯一方法(&
之后的所有内容都未存储...),是将数据发送到 php 脚本并构建未正确编码的手动数据字符串。
如果您使用 javascript 发出 POST 请求,则需要在将值添加到查询字符串之前使用 encodeURIComponent()
对其进行编码。
如果您使用 php(例如 cURL)发出 POST 请求,您需要 urlencode()
正确编码该值,然后再将其添加到查询字符串。
并且要在数据库中存储具有任何类型字符的任何字符串,推荐的方法是使用带有绑定参数的准备语句。但是,这似乎与您的问题没有任何关系。
- 使用准备好的语句。请参阅下面的参考资料。
这是我使用的一个脚本(从我的一个库中提取)并且它可以工作,即使使用&符号(预测试)并确保该列是 varchar
.
预测试成功进入数据库"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.";
}
参考文献:
我已经检查过 htmlentities、htmlspecialchars、mysql_real_escape_string,但没有任何帮助。
我只想保存"Hello my name is john & my native is chennai"
当我试图保存这个时,只保存了 "Hello my name is john "。
我应该如何将 php 表单中的 & 符号存储到 mysql 数据库?
更新示例代码: 让输入字段像
<input type="text" name="product_desc" />
并在 php 中获取值就像
$product_description = htmlentities($_POST['product_desc']);
$product_description2 = htmlspecialchars($_POST['product_desc']);
您是否尝试过使用 HTML 实体?
& = $
php中字符串中的&
字符没有什么特别之处。
获得结果的唯一方法(&
之后的所有内容都未存储...),是将数据发送到 php 脚本并构建未正确编码的手动数据字符串。
如果您使用 javascript 发出 POST 请求,则需要在将值添加到查询字符串之前使用 encodeURIComponent()
对其进行编码。
如果您使用 php(例如 cURL)发出 POST 请求,您需要 urlencode()
正确编码该值,然后再将其添加到查询字符串。
并且要在数据库中存储具有任何类型字符的任何字符串,推荐的方法是使用带有绑定参数的准备语句。但是,这似乎与您的问题没有任何关系。
- 使用准备好的语句。请参阅下面的参考资料。
这是我使用的一个脚本(从我的一个库中提取)并且它可以工作,即使使用&符号(预测试)并确保该列是 varchar
.
预测试成功进入数据库"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.";
}
参考文献: