Reputation: 109
I'm using nodejs http.get method to post datas to a php
But the php's charset is not UTF-8, it's ISO-8859-9 (turkish)
So post data's not being inserted to database in correct way,
this is my node js file :
var data="ğüşıöç ĞÜŞİÖÇ"
var postdata="isim="+encodeURIComponent(data)+"";
var options2 =
{
host: "localhost",
port: 80,
path: "/bbb.php",
method: 'POST',
headers:{"Host":"localhost","Content-Length": postdata.length,'Content-Type': 'application/x-www-form-urlencoded'}
};
var post_req = http.get(options2, function (res)
{
var responseBody='';
res.on('data', function (d) { responseBody += d; });
res.on('end', function (d)
{
sys.print(responseBody);
});
}).on('error', function (e) {sys.print(e.message);});
post_req.write(postdata);
post_req.end();
and this is php file :
<?
header('Content-type: text/html; charset=ISO-8859-9');
$dbbaglanti=mysql_connect("localhost", "root", "");
mysql_select_db("db");
mysql_query("SET NAMES 'latin5'");
$isim = $_POST["isim"];
mysql_query("insert into deneme (isim) values ('".$isim."')");
?>
data is being inserted in database like this : ÄüÅıöç ÄÃÅÄ°ÃÃ
but I know if I do this in php :
$isim = iconv("utf-8","iso-8859-9",$_POST["isim"]);
data is being inserted without a problem : ğüşıöç ĞÜŞİÖÇ
so how can I do this in correct way ? I googled many many times, I cant figure out how can I do this. I know there is some iconv extensions for nodejs, but they are for linux not windows. Is there any method like iconv in javascript or nodejs (windows) ? or any extension for windows ? or any other suggestions ?
please dont say me change the php's charset to utf-8, I can't edit the php, I gave localhost as an example.
Upvotes: 4
Views: 1864
Reputation: 140228
encodeURIComponent
always encodes as utf-8 (and then turns the resulting utf-8 bytes to percent-encoding), so I guess you have to use a library, or roll your own. I used some code from a library of mine to make this:
var encodeURIComponentLatin5 = (function() {
var latin5 = [
0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD
,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD
,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F
,0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F
,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F
,0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F
,0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F
,0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0xFFFD
,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD
,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0xFFFD
,0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF
,0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF
,0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF
,0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF
,0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF
,0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF
];
var map = {};
latin5.forEach( function(v,i) {
map[v] = i;
});
function percentEncode( num ) {
var str = num.toString(16);
return "%" + (str.length < 2 ? "0" + str : str).toUpperCase();
}
return function( str ) {
var code, i = 0, ret = [], cp;
while( !isNaN( code = str.charCodeAt(i++) ) ) {
cp = map[code];
if( !cp || code === 0xFFFD ) {
continue;
}
if(
65 <= code && code <= 90 ||
97 <= code && code <= 122 ||
48 <= code && code <= 57 ||
45 <= code && code <= 46 ||
code === 95 ||
code === 126
) {
ret.push( str.charAt( i-1 ) );
}
else {
ret.push( percentEncode( cp ) );
}
}
return ret.join("");
};
})();
var data="ğüşıöç ĞÜŞİÖÇ";
var postdata="isim="+encodeURIComponentLatin5(data)+"";
//"isim=%F0%FC%FE%FD%F6%E7%20%D0%DC%DE%DD%D6%C7"
Upvotes: 2