Как вставить японский текст в таблицу Postgres, используя PHP? - PullRequest
1 голос
/ 27 июня 2009

Я пытаюсь добавить "や 訳 す る テ キ ス ト や ペ Web ー ー ジ" в таблицу PostgreSQL, но это показано так:

"& #32763;""& #35379;"す& #12427;テ& #12461;& #12473;& #12488;& #12420;Web& #12506;& #12540;& #12472;

Как мне вставить это в правильном формате?

<?php
$db = pg_connect("host=localhost port=5432 dbname=lang user=password=") or die(":(");
pg_set_client_encoding($db , "UTF-8");
#pg_exec($db,"SET NAMES 'UTF-8'");
#pg_exec($db,"SET CLIENT_ENCODING TO 'UTF-8'");
//$lan=iconv("UTF-8",'ISO-8859-1//TRANSLIT',$_REQUEST['lan']);
$lan=$_REQUEST['lan'];
echo $lan;
if(array_key_exists('sub',$_REQUEST))
{
$sql="INSERT INTO table1 (japan) VALUES('{$lan}')";
pg_query($sql) or die("errot");
}
?>

<html>
<body>
  <form action="" method="">
    <input type="text" name="lan" />
    <input type="submit" name="sub" />
  </form>
</body>
</html>

Ответы [ 3 ]

1 голос
/ 27 июня 2009

По моему мнению, PG правильно хранит значения, поскольку 32763 равно шестнадцатеричному, 7FFB равно 翻 ( wiki )

Возможно, у вас есть проблемы с отображением данных? Существует ли отдельный тип данных с поддержкой Unicode для строковых столбцов? Вы проверили с помощью pgAdmin, каково фактическое содержимое вашей таблицы?

1 голос
/ 27 июня 2009

Похоже, что проблема вообще не связана с базой данных.

Просто в вашем HTML отсутствует объявление кодировки (на практике нет надежной кодировки по умолчанию для HTML, и вы получите мусор).

Добавить соответствующий тег <meta> или отправить заголовок Content-Type с параметром charset.


Кстати: у вас есть уязвимость SQL-инъекции в коде. Не помещайте переменные запроса в запросы. Используйте готовые утверждения или, по крайней мере, всегда используйте pg_quote().

1 голос
/ 27 июня 2009

что у вас будет работать, пока table1 имеет правильное сопоставление

см. http://www.postgresql.org/docs/8.1/static/sql-createdatabase.html для настройки кодировки (для всей базы данных)

см. http://www.postgresql.org/docs/8.1/static/multibyte.html о доступной поддержке персонажей и о том, как их использовать

редактировать
обратите внимание, что php предоставляет pg_set_client_encoding () для изменения кодировки, однако, подобно прямому SQL-запросу, который делает то же самое, он преобразует из бэкэнд-кодировки в запрошенная клиентская кодировка и не помогает со вставками. Чтобы это работало, база данных / postreSQL должна иметь правильный набор кодировки (см. Первые две ссылки).

(примечание: mysql лучше обрабатывает параметры сортировки намного , так что если вы не слишком далеко друг от друга и вам требуется несколько параметров сортировки, то может быть хорошей идеей переключиться)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...