我正在使用自定义 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
有没有办法让 '&' 字符可识别为任何其他字符并避免我的文本被截断?
答案 0 :(得分:3)
问题是因为您在 URL 编码的字符串中发送数据,其中 & 字符具有特殊含义并且需要进行编码。
但是,对于 POST 请求,您应该在请求正文中传递值,而不是 URL。使用 jQuery 执行此操作的最简单方法是向 data
设置的 $.ajax
属性提供一个对象,jQuery 将负责对其进行正确编码并将其设置在请求的正确部分给你。
此外,您应该删除 async: false
设置。始终异步发送 AJAX 请求,因为不推荐使用同步请求,并将在浏览器控制台中显示警告。由于您正确使用回调,因此无论如何都不需要 async: false
。
说了这么多,试试这个:
$.ajax({
url: 'm-add-edit.php?',
type: 'POST',
data: {
tableName: 'Items',
description: $('#itemDescription').val()
},
success: function(data) {
console.log(data);
},
error: function(x, s, e) {
console.log(x, s, e);
}
});
答案 1 :(得分:0)
相当于php中的encodeUri:使用rawurlencode
function encodeURIComponent($str) {
$revert = array('%21'=>'!', '%26' =>'&', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
return strtr(rawurlencode($str), $revert);
}
答案 2 :(得分:-1)
如果您对特定符号有问题,为什么不使用一些替换功能并将&
更改为其他特定和原始符号例如:_ampersand_
或类似的东西,然后发送解码