我想使用ajax概念将html页面中的中文字符存储到oracle数据库中。
Front end : HTML & PHP.
Back end : Oracle 11G.
Oracle特征:
NLS_LANGUAGE = AMERICA
NLS_CHARACTERSET = WE8MSWIN1252
NLS_NCHAR_CHARACTERSET = AL16UTF16
当我尝试使用表单存储中文字符时,提交存储成功,如果我尝试通过ajax存储,我会在数据库中收到奇怪的字符。
在ajax页面中我添加了这一行:
header("Content-type: text/html; charset=utf-8");
并在html页面中添加了以下行:
<meta http-equiv="Content-type" value="text/html; charset=utf-8">
我经历了很多堆栈溢出建议,但没有运气。
请告诉我如何解决这个问题。
提前致谢。
代码: HTML代码。
<html>
<head>
<meta http-equiv="Content-type" value="text/html; charset=utf-8">
<title>Test</title>
<script src="jquery.min.js"></script>
<script>
function addForm()
{
var english=document.getElementById('txt_english').value;
var id=document.getElementById('txt_id').value;
var chinese=document.getElementById('txt_chinese').value;
$.ajax({
type: "POST",
async: false,
url: "ajax/ajax_add_form.php",
data:
{
english: english,
chinese: chinese,
id: id
}
}).done(
function (html){
alert(html);
});
}
</script>
</head>
<body>
<input type='text' name='txt_id' id='txt_id' value='' /><br>
<input type='text' name='txt_english' id='txt_english' value='' />
<input type='text' name='txt_chinese' id='txt_chinese' value='' />
<button type="button" onclick="addForm()">Click Me!</button>
</body>
</html>
PHP代码: ajax / ajax_add_form.php
<?php
header("Content-type: text/html; charset=utf-8");
include("../config.php");
extract($_REQUEST);
$sql=oci_parse($conn,"insert into test(id,english,chinese1)values(:id,:english,:chinese)");
oci_bind_by_name($sql, ':id', $id);
oci_bind_by_name($sql, ':english', $english);
oci_bind_by_name($sql, ':chinese', $chinese);
oci_execute($sql);
echo "success";
?>
我的问题:
即使它以其他格式存储,当我回到网页时,它正常工作并正确显示。
我的问题是另一个名为敏捷的工具也访问相同的数据,因此没有发生转换,它显示数据库中存储的数据格式。
因此我希望在用户输入时完全存储,无需任何转换。
答案 0 :(得分:0)
确保您已将OCI
连接设置为使用UTF-8:
oci_connect($username, $password, $connection_string, 'UTF8');
这告诉Oracle您正在发送和期望接收的字符集编码。然后Oracle自动负责服务器和客户端之间的“转换”。来自documentation(强调我的):
确定Oracle客户端库使用的字符集。字符集不需要与数据库使用的字符集匹配。 如果不匹配,Oracle将尽力将数据转换为数据库字符集。根据字符集,这可能无法提供有用的结果。转换还会增加一些时间开销。
您唯一需要注意的是您的PHP应用程序将所有内容视为UTF-8。
答案 1 :(得分:0)
尝试
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
而不是
<meta http-equiv="Content-type" value="text/html; charset=utf-8">