【发布时间】:2021-05-09 21:49:39
【问题描述】:
我正在使用自定义 PHP 文件将数据发送到我的 JSON 文件并对其进行更新,但如果字符串中包含“&”字符,则该字符串会被截断,并且该“&?”之后的文本会被截断。 char 和 '&' 都被隐藏了。
m-add-edit.php:
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
$tableName = $_POST['tableName'];
// HTML sanitization
if (strpos($tableName, '<') !== false || strpos($tableName, '>') !== false
){ $tableName = preg_replace("/[^a-zA-Z]/", "", $tableName); }
// Get JSON Table's Data
$data = file_get_contents($tableName. '.json');
$data_array = json_decode($data, true);
// SAVE DATA
$newDataArr = array();
foreach ($data_array[0] as $k=>$v){
$keysArr = explode("_", $k);
$kType = $keysArr[0];
$kName = $keysArr[1];
echo $_POST[$k]; // This is just to test the output when sending data
}
以下是我用来从输入字段 (#itemDescription) 获取值并调用上面的 PHP 文件的 AJAX 函数:
var params = 'tableName=Items&description='+ $('#itemDescription').val();
$.ajax({
url : 'm-add-edit.php?',
type: 'POST',
data: params,
async: false,
success: function(data) {
console.log(data); // <-- JUST TO TEST THE OUTPUT
// error
}, error: function(e) {
}});
因此,如果#itemDescription 输入包含“&”字符,则该字符将被隐藏,其后的文本也会被隐藏。
我得到的控制台日志是:
Text with
有没有办法让 '&' 字符可识别为任何其他字符并避免我的文本被截断?
【问题讨论】:
-
除了发送到服务器的内容外,您已经记录了所有内容...
tableName=Items&description=Text with & and more中没有可疑内容? -
Franko 为什么不使用 PHP 的内置清理功能?
-
@sxkx 如何在我的 PHP 代码中使用它?
-
另外,
params在发送时究竟包含哪些内容?tableName=Items&description=Text with & and more? PHP 应该如何猜测中间的&不是值之间的分隔符,而是该值的一部分?为什么不使用参数数组,让 jQuery 处理所有转义?如果您不想为此使用数组,则需要自己处理特殊字符(正如 Andreas 在第一条评论中指出的那样!) -
如果您将
$tableName = $_POST['tableName'];替换为$tableName = filter_var($_POST['tableName'], FILTER_SANITIZE_STRING);,您可以取消// HTML sanitization部分。有关信息,请参阅; filter_var 和 Sanitize filters.
标签: javascript php jquery database urlencode