我有一个php代码,它从URL参数中捕获一个变量,并通过html edditbale文本字段传递给Jquery / Ajax,然后再传递给外部php代码,将其传递给我的Firebird DB。 问题是jquery / ajax正在将ä等字符改为¤等等。
首先我认为我必须使用ISO8859_1(表正在使用)对firebird SQl更新进行编码,然后我发现它正在更改字符的Jquery。
这是我的代码:
?>
<div id="wrap">
<h3>Comment</h3>
<div id="status"></div>
<div id="content">
<div id="editable" contentEditable="true">
<?php
echo $row[21];
?>
</div>
<button id="save">Save</button>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready(function() {
$("#save").click(function (e) {
var content = $('#editable').html()
var nr = <?php echo $s; ?>;
$.ajax({
url: 'save.php',
type: 'POST',
data: {
content: content,
nr: nr
},
success:function (data) {
if (data == '1')
{
$("#status")
.addClass("success")
.html("Data saved successfully")
.fadeIn('fast')
.delay(3000)
.fadeOut('slow');
}
else
{
$("#status")
.addClass("error")
.html("An error occured, the data could not be saved")
.fadeIn('fast')
.delay(3000)
.fadeOut('slow');
}
}
});
});
$("#editable").click(function (e) {
$("#save").show();
e.stopPropagation();
});
$(document).click(function() {
$("#save").hide();
});
});
</script>
答案 0 :(得分:1)
我在将值发送到db:
之前简单地使用php翻译解决了这个问题$ content2 = utf8_decode($ content);
答案 1 :(得分:0)
默认[content-type]是“application / x-www-form-urlencoded; charset = UTF-8”
换句话说,您发布到PHP页面的内容是 UTF-8编码字符串。如果你想要任何其他东西(比如ISO-8859-1),你需要转换它。
答案 2 :(得分:0)
试一试
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
timeout: 20000,
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
dataType: 'json',
success: callback
});
您还必须在服务器上指定字符集。
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
在您发表评论后再次更新答案
见下面的网址我觉得这对你很重要。
如何将javascript字符串转码为iso-8859-1
答案 3 :(得分:0)
正如Joachim Isaksson所说,你不能在UTF-8之外的另一个字符集中提交数据。
我通常在前端控制器中使用此功能来转换所有$_POST
数组。
<?php
public function direct($POST)
{
if (!empty($_POST)) {
$flag_unicoded = false;
if (strpos(strtolower($_SERVER['CONTENT_TYPE']), 'charset=utf-8') !== false) $flag_unicoded = true;
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && strpos(strtolower($_SERVER['CONTENT_TYPE']), 'charset') === false) $flag_unicoded = true;
if ($flag_unicoded) {
function utf8_decode_recursive($input) {
$return = array();
foreach ($input as $key => $val) {
if (is_array($val)) $return[$key] = utf8_decode_recursive($val);
else $return[$key] = utf8_decode($val);
}
return $return;
}
$_POST = utf8_decode_recursive($_POST);
}
return $_POST;
}
}
?>
修改强>
未经测试,但你可以试试这个:
jQuery.ajaxSetup({'beforeSend' : function(xhr) {xhr.overrideMimeType('charset=ISO-8859-1'); }});
答案 4 :(得分:0)
我希望这不是一个重复的答案。 我有一个jsp应用程序的这个问题。页面在iso-8859-1中,但是使用jquery.serialize(),从IE发布时数据会被破坏。 我在上面看到了Abid Hussain的建议,但改为
contentType:“application / x-www-form-urlencoded; charset = UTF-8”,
例如。告诉服务器它是UTF-8,而不是iso-8859-1 这解决了我的问题。
$("#caleditform").submit(function(){
$.ajax(
{
url:$("#caleditform").attr('action'),
type: "POST",
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
data: $('#caleditform').serialize(),
success:function(html){
$('#projectdialog').html(html);
}
}
);
return false;
});
谢谢