如何将文本字段('+<>$“)中的特殊字符保存到数据库中,然后使用 PHP 检索它们
How do I save special characters from a textfield ('+<>$") into a database, then retrieve them with PHP?
我有一个为个人信息创建的文本区域,带有主题。它被传递给Javascript/jQuery函数,该函数将其传递给PHP文件以存储在数据库中。但是,当使用特殊字符(如与号、小于、大于、撇号、加号和引号(时,它无法正确存储在我的数据库中。所以不用说,当我检索数据时,数据没有正确显示。
这是 HTML:
<input id="pmsubject" placeholder="Subject"><br />
<textarea id="pmtext" placeholder="Send a private message"></textarea>
<button id="pmBtn" onclick="postPm(pmsubject,pmtext)">Send</button>
以下是Javascript/jQuery(部分(:
function postPm(subject,textarea){
var data = $("#textarea").val();
var data2 = $("#subject").val();
我做了一些错误检查和处理,然后用AJAX发送我的信息:
type: "POST",
url: "pm_system.php",
data:"data="+data+"&data2="+data2,
到目前为止一切顺利吧?这是我存储代码的pm_system.php部分:
$data = htmlentities($_POST['data']);
$data = mysqli_real_escape_string($db_con, $data);
$data2 = htmlentities($_POST['data2']);
$data2 = mysqli_real_escape_string($db_con, $data2);
$sql = "INSERT INTO pm(subject, message)
VALUES('$data2','$data')";
$query = mysqli_query($db_con, $sql);
mysqli_close($db_con);
因此,如果我写一条消息说,我是猫+狗和"有时"鸟类的忠实粉丝。我的输出将是:
我是猫狗的忠实粉丝
它总是在引号和撇号前面加上斜杠,总是用空格替换 + 号,& 符号后面什么都没有。我尝试在 Javascript 中替换这样的字符:
data = data.replace(/'"/g, '"'); //Just using one for example
但这也行不通。如何将这些字符从文本区域保存在数据库中,原封不动?
我猜,你通过JavaScript函数接收的数据已经被转义了。因此,当您输入I'm a big fan of cats dog
时,您会在PHP脚本中得到I''m a big fan of cats dogs
。当您使用mysqli_real_escape()
时,您将添加另一个转义字符。
因此,您可能希望在以下字符之前替换转义字符:
$data = stripslashes($_POST['data']);
$data = mysqli_real_escape_string($db_con, $data);
$data2 = stripslashes($_POST['data2']);
$data2 = mysqli_real_escape_string($db_con, $data2);
$sql = "INSERT INTO pm(subject, message)
VALUES('$data2','$data')";
$query = mysqli_query($db_con, $sql);
mysqli_close($db_con);
我不建议使用htmlentities()
而是将数据"按原样"保存到数据库中,否则全文搜索等功能将无法正常工作。
号的问题可能是因为您将值作为查询字符串data:"data="+data+"&data2="+data2
发送,而在 URL 中,+ 符号用于空格。要解决此问题,您应该将数据作为对象传递:
type: "POST",
url: "pm_system.php",
data: { "data": data, "data2": data2 },
这也应该修复大多数其他有问题的角色。
我建议尝试htmlspecialchars()
而不是htmlentities()
。过去,我在htmlentities()
和输出数据方面遇到了一些麻烦。使用htmlspecialchars()
解决了它。
- javascript替换换行符和特殊字符
- angularjs删除动态形式元素中的特殊字符
- 使用json_encode通过xmlhttp.responseText发送特殊字符(即caron)
- 在搜索中考虑特殊字符的
- 避免键入一些特殊字符
- Regex测试特殊字符
- 在 Javascript 中对特殊字符进行排序 (æ)
- 必须检查长度,并在文本框中允许一些特殊字符
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- 用于在Javascript中删除多个空格的特殊字符
- jQuery-Regex以防止任何特殊字符
- javascript正则表达式来识别所有特殊字符
- RegEx只获取特殊字符,前后不获取任何字符
- 如何使用JQuery检查输入(电子邮件)字段是否包含特殊字符
- Javascript:包括特殊字符的文本选择
- 获取特殊字符后没有单词的句子
- 替换字符串javascript中的所有特殊字符..
- 在cshtml中对特殊字符进行编码
- 如何将文本字段('+<>$“)中的特殊字符保存到数据库中,然后使用 PHP 检索它们
- Html5数据库保存'?!&等作为html5数据库中的特殊字符