除了在JavaScript,Ajax和PHP之间来回传递值的问题外,其他代码均能正常工作。使用TinyMCE作为编辑器,当我在文本中添加一个段落分隔符时,保存数据(通过JavaScript / Ajax和PHP传递数据),文本看起来还可以。这是JavaScript和Ajax代码-可以正常工作,当单击“提交”按钮时,它将数据正确传递给PHP程序:
// save the main who's who form data:
$("form#who_main").submit(function(e)
{
e.preventDefault();
// first thing, clear out the message div used for this (if there's anything there):
document.getElementById("who_message").innerHTML = "";
// because we're using TinyMCE, need to replace value in that into the textarea
// so that when JavaScript gathers the formData it is getting it from the textarea
// controls (it doesn't know what to do with TinyMCE):
var shortbio = tinymce.get('shortbio').getContent();
document.getElementById( "shortbio" ).value = shortbio;
var user_notes = tinymce.get('user_notes').getContent();
document.getElementById( "user_notes" ).value = user_notes;
var admin_notes = tinymce.get('admin_notes').getContent();
document.getElementById( "admin_notes" ).value = admin_notes;
// this loads all the controls of the form rather than doing one at a time and fumbling
// with the file object ...:
var formData = new FormData(this);
// ajax call to attempt to upload and save the image:
$.ajax
({
type: "POST",
url: "<?php echo $History_html_RootPath; ?>admin/AjaxCalls/who_update_main_save.php",
data: formData,
dataType: "json", // return value is json array
processData : false,
contentType: false,
success: function(data)
{
// need to see if we have an error, if so, display it, otherwise,
// we should hopefully have success ...
if ( data[0].toLowerCase().includes( "error" ) )
{
var errormsg = "<div class='alert alert-danger'>"+data+"</div>";
document.getElementById("who_message").innerHTML = errormsg;
return;
}
else
{
// success!
// update things on screen, so we don't get confused using the data array returned
// from PHP:
document.getElementById("namecode").value = data[0];
document.getElementById("region").value = data[1];
document.getElementById("local").value = data[2];
document.getElementById("preferredtitle").value = data[3];
document.getElementById("shortbio").value = data[4];
tinymce.get('shortbio').setContent( data[4] );
document.getElementById("headshotphoto").value = data[5];
document.getElementById("photographername").value = data[6];
document.getElementById("photographerlink").value = data[7];
document.getElementById("user_notes").value = data[8];
tinymce.get('user_notes').setContent( data[8] );
document.getElementById("admin_notes").value = data[9];
tinymce.get('admin_notes').setContent( data[9] );
// clear out the upload file control:
//document.getElementById("headshotphoto").value = "";
// change the message:
var message = "<div class='alert alert-success'>";
message += "<b>Success!</b> This data has been updated in the <i>holding</i> table.";
message += "</div>";
document.getElementById("who_message").innerHTML = message;
return;
}
} // end success
}); // end ajax call
}) // end of code associated with who_main submit
PHP文件通过发布接收数据,我使用PHP函数mysqli_real_escape_string()处理问题。这样做的一个问题是它似乎在引号中插入了反斜杠(单引号和双引号),依此类推。我只是想到可能是问题的原因,这是我不确定的原因。我将对其进行测试,但与此同时。 ...我将数据保存到表中,一切都很好。如果出现段落中断,则将适当的标签保存到表中。
一些文本
更多文本为“引用文本”
当我使用JSON编码将数据传回时:
$returndata = array();
$returndata[0] = $namecode;
$returndata[1] = $region;
$returndata[2] = $local;
$returndata[3] = $preferredtitle;
$returndata[4] = $shortbio;
$returndata[5] = $photo_file;
$returndata[6] = $photographername;
$returndata[7] = $photographerlink;
$returndata[8] = $user_notes;
$returndata[9] = $admin_notes;
// done-done:
echo json_encode( $returndata );
return;
上面的代码(javascript / Ajax代码)回来看起来像:
一些文本
\ r \ n更多文本\“引用文本”
我不需要在文本中显示\ r \ n和\'(或\“)。如果我要再次保存它,因为反斜杠被重复等等,它会变得很奇怪。有一些我想念的东西,但我不知道是什么,这让我发疯,因为其他所有东西都可以按我的需要正常工作。
注意添加了我尝试在PHP中使用的代码来处理“转义符”,它适用于单引号和双引号,但不适用于\ r \ n字符-而是它只是去除反斜杠:
function remove_escapes( $string )
{
$string = str_replace ( "\'", "'", $string ); // convert single quote
$string = str_replace ( "\"", """, $string ); // convert double-quote
$string = str_replace ( "\r\n", "", $string ); // remove \r\n
$string = str_replace ( "\\", "", $string ); // remove slash
// anything else giving us heartburn?
return $string;
} // eof: remove_escapes()
如果将其与json数组一起使用,则会在段落之间插入字母rn:
$returndata[8] = remove_escapes( $user_notes );
$returndata[9] = remove_escapes( $admin_notes );
答案 0 :(得分:0)
也许会做类似data.replace(/\n/g, '<br>')
的操作,这将用html newline或data.replace(/\\n/g, '<br>')
替换所有换行标记以查找字符而不是换行标记
答案 1 :(得分:0)
我已经做了一些测试以检查数据,由于从$ _POST()数组中获取数据时,由于mysqli_real_escape_string()函数的缘故,它似乎正在发生。如果我将其取出,则不会获得\ r \ n代码。因此,也许jquery帖子以我不需要该功能的方式传递东西?在三种不同的文本控件上进行的进一步测试表明,它无需使用mysqli_real_escape_string即可正常工作,并且我还有一些额外的功能可以处理在文本中查找JavaScript等问题,因此我可以简化代码。除非有人能告诉我不这样做的理由...?
答案 2 :(得分:0)
mysqli_real_escape_string()
在那里可以转义特殊字符,这有助于防止sql注入之类的黑客攻击。
答案 3 :(得分:0)
看来,我能找到的唯一解决方案是继续mysqli_real_escape_string(),但在将信息传回时,保存更改后,从表中重新加载数据,该表不显示转义字符,因此避免了这个问题。似乎有很多额外的数据处理,但是一次(来回传递)一次(在我的代码中)。