使用ajax在oracle中存储中文字符不起作用

时间:2016-08-18 10:12:41

标签: php jquery ajax oracle

我想使用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";
?>

enter image description here

我的问题:

即使它以其他格式存储,当我回到网页时,它正常工作并正确显示。

我的问题是另一个名为敏捷的工具也访问相同的数据,因此没有发生转换,它显示数据库中存储的数据格式。

因此我希望在用户输入时完全存储,无需任何转换。

2 个答案:

答案 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">