Я хочу хранить китайские символы с html-страницы в базе данных оракула, используя концепцию ajax.
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"; ?>
в<?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"; ?>
Мой вопрос:
Несмотря на то, что он хранится в другом формате, когда я возвращаюсь на веб-страницу, он работает и отображает правильно.
Моя проблема – еще один инструмент под названием agile, который также получает доступ к тем же данным, поэтому преобразование не происходит, он показывает, какой формат данных хранится в базе данных.
Следовательно, я хочу хранить точно так же, как пользователь вводит, нет необходимости в каком-либо преобразовании.
Убедитесь, что вы установили соединение OCI
с UTF-8:
oci_connect($username, $password, $connection_string, 'UTF8');
Это сообщает Oracle кодировку кодировки, которую вы отправляете и ожидаете получить. Затем Oracle берет на себя «перевод» между сервером и клиентом автоматически. Из документации (акцент мой):
Определяет набор символов, используемый библиотеками Oracle Client. Набор символов не обязательно должен соответствовать набору символов, используемому базой данных. Если он не соответствует, Oracle сделает все возможное, чтобы преобразовать данные в набор символов базы данных и из него . В зависимости от набора символов это может не дать полезные результаты. Преобразование также добавляет некоторые накладные расходы.
Единственное, что вам нужно позаботиться, это то, что ваше приложение PHP рассматривает все как UTF-8.
Пытаться
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
вместо
<meta http-equiv="Content-type" value="text/html; charset=utf-8">