ISO8859_1中的Jquery AJAX传递变量
Posted
技术标签:
【中文标题】ISO8859_1中的Jquery AJAX传递变量【英文标题】:Jquery AJAX passing variable in ISO8859_1 【发布时间】:2012-10-14 17:20:45 【问题描述】:我有一个 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>
【问题讨论】:
我是按照我的方式做的:只需将此添加到您要提交到数据库的最后一个变量中:iconv("ISO-8859-1", "UTF-8", $content) ;这是最后一步:如何以字符集 ISO-8859-1 提交它??? 【参考方案1】:我在将值发送到数据库之前通过简单地使用 php 翻译解决了这个问题:
$content2 = utf8_decode($content);
【讨论】:
【参考方案2】:阅读jQuery.ajax documentation;
默认 [content-type] 是“application/x-www-form-urlencoded; charset=UTF-8”
换句话说,您发布到您的 PHP 页面的是一个 UTF-8 编码的字符串。如果您需要其他任何内容(如 ISO-8859-1),则需要对其进行转换。
【讨论】:
我该如何改变它?我已经尝试了几件事,但没有运气 @MichaelMüller 据我所知(如果我是的话,我相信我会被证明是错误的 :)),你不能(可移植地)更改jQuery.ajax()
在帖子中使用的字符集,您必须将其转换为服务器端。
顺便说一句。我也有问题,它将换行符发布为 这应该首先是 但实际上在我的 firebird 数据库中是真正的换行符,如何解决这个问题?【参考方案3】:
试试看
$.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
How do I transcode a Javascript string to ISO-8859-1?
【讨论】:
这对我不起作用,我确实在帖子行下放入了内容类型字符串,但我在哪里放置 php 字符集?这是使用错误字符集传递文本的行: var content = $('#editable').html() 我已经更新了我的答案。我提到了一个网址。请看一看。 我之前读过,但没有进一步了解。问题是我对 php 和 sql 的基本了解很少,但完全没有 jqery 技能。 对不起,我没有机会理解这一点。我尝试了无数的东西,但在我理解 java 合成器之前,我没有机会将这些例子翻译成我的。【参考方案4】:正如 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'); );
【讨论】:
【参考方案5】:我希望这不会显示为重复的答案。 我在一个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;
);
谢谢
【讨论】:
以上是关于ISO8859_1中的Jquery AJAX传递变量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正确的字符编码在 jQueryMobile 1.3.1 中通过 AJAX 加载 ISO-8859-1 内容?