2009-06-27 9 views
1

je suis Tring ajouter "翻 訳 す る テ キ ス ト や Web ペ ー ジ" dans une table de PostgreSQL, mais sa montre comme ceci:Comment insérer du texte japonais dans une table Postgres en utilisant PHP?

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

Comment puis-je insérer que dans le format approprié?

<?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> 

Répondre

1

ce que vous avez fonctionnera aussi longtemps que table1 a la collation droit

voir http://www.postgresql.org/docs/8.1/static/sql-createdatabase.html pour définir l'encodage (base de données à l'échelle)

voir http://www.postgresql.org/docs/8.1/static/multibyte.html pour le support des caractères disponibles et comment utiliser les

modifier
Notez que php fournit un pg_set_client_encoding() pour modifier le codage, cependant, comme la requête SQL directe qui fait la même chose, il convertit de le backend codant à le codage client requis et n'aide pas avec les insertions. Pour que cela fonctionne, la base de données/postreSQL doit avoir l'encodage correct (voir les deux premières références).

(note: poignées mysql beaucoup collations mieux donc si vous n'êtes pas trop loin et vous avez besoin alors il plusieurs collations peut être une bonne idée de changer)

+0

quel classement dois-je utiliser? – coderex

+0

- - vidage de base de données PostgreSQL - - Commencé le 2009-06-27 17:22:32 SET client_encoding = 'UTF8'; SET standard_conforming_strings = désactivé; SET check_function_bodies = false; SET client_min_messages = avertissement; SET escape_string_warning = off; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; - - Entrée de la table des matières 1466 (classe 1259 OID 71803) - Dépendances: 3 - Nom: table1; Type: TABLE; Schéma: public; Propriétaire: prasanth; Espace de table: - CREATE TABLE table1 ( id entier NOT NULL, caractère japonais (1000) ); – coderex

1

À mon avis, PG stocke les valeurs correctement, puisque 32763 est égal à hex 7FFB est égal à 翻 (wiki)

Vous avez probablement eu un problème d'affichage des données? Existe-t-il un type de données Unicode distinct pour les colonnes de type chaîne? Avez-vous vérifié avec pgAdmin quel est le contenu de votre table?

1

Il semble que le problème ne soit pas du tout lié à la base de données. Il n'y a tout simplement pas de déclaration d'encodage dans votre code HTML (en pratique, il n'y a pas de codage par défaut fiable pour le code HTML et vous obtiendrez des données erronées).

Ajouter une balise <meta> appropriée ou envoyer l'en-tête Content-Type avec le paramètre charset.


BTW: vous avez une vulnérabilité d'injection SQL dans le code. Ne placez pas les variables de requête dans les requêtes. Utilisez des instructions préparées ou au moins utilisez toujours pg_quote().

+0

oui sûrement, ce code est juste pour la compréhension seulement .. comme je suis nouveau dans PGSql.Alors il est difficile de comprendre.je sais php mysql et ma forme de plat principal est le même. :) Et j'ai fait la méthode d'endodage HTML aussi je veux juste savoir qu'il n'y a aucune difficulté lorsque j'utilise la fonction de recherche DB. – coderex

Questions connexes