Page 1 of 1

การแสดงอักขระพิเศษ (พิมพ์ผ่านคีย์บอร์ดด้วยปุ่ม Alt+ตัวเลข) บนเวปทำอย่างไงครับ

Posted: 18/06/2011 5:58 am
by BasicNeeds
ผมมีข้อมูลเป็นชื่อต่าง ๆ ที่ผู้ใช้สร้างขึ้นเก็บไว้ใน mysql เก็บไว้แบบ tis620 ซึ่งเวลาดูจะเห็นอักขระที่ผู้ใช้พิมพ์ด้วย Alt+ตัวเลขต่าง ๆ ไม่ได้ หรือไม่ถูกต้อง (เช่น เว้นวรรคบางคนไม่ใช้ spacebar แต่จะใช้ Alt+160 แทน)

พอเราจะให้มันแสดงผลผ่านหน้าเวปด้วย php+html มันก็จะทำให้ browser แสดงผลอักขระนี้ไม่ถูกต้อง เช่นเป็นช่องสีเหลี่ยงใน IE เป็นต้น

ขอคำแนะนำหน่อยครับ ว่าจะทำอย่างไงให้อักขระพวกนี้แสดงผลได้ถูกต้องตรงกับที่เขาพิมพ์มา

ขอบคุณครับ

Re: การแสดงอักขระพิเศษ (พิมพ์ผ่านคีย์บอร์ดด้วยปุ่ม Alt+ตัวเลข) บนเวปทำอย่างไงครับ

Posted: 18/06/2011 12:30 pm
by mindphp
ขอดูตัวอย่างข้อมูลจริงๆ หน่อยครับ

Re: การแสดงอักขระพิเศษ (พิมพ์ผ่านคีย์บอร์ดด้วยปุ่ม Alt+ตัวเลข) บนเวปทำอย่างไงครับ

Posted: 18/06/2011 7:13 pm
by BasicNeeds
Image

ดูชื่อบรรทัดที่ 3 จริง ๆ ต้องชื่อ • อั ง รี ดู นั ง ต์ • (ตรงเว้นวรรคระหว่างตัวอักษรเขาใช้ Alt+160 ครับ แต่พอผ่าน code ด้านล่างแสดงบนเวป มันเป็นสีเหลี่ยมใน IE เป็นเครื่องหมายอื่นใน Firefox)

ด้านบนคือภาพจาก code ล่างนี้ครับ

Code: Select all

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=tis-620" />
</head>

<body>

<?php

$hostdb = "***";
$userdb = "***";
$passdb = "***";
$db_game = "***";

mysql_connect($hostdb, $userdb, $passdb) or die("ติดต่อฐานข้อมูลไม่ได้");
mysql_select_db($db_game) or die("เลือกฐานข้อมูลไม่ได้");

mysql_query("SET NAMES TIS620");
//mysql_query("SET character_set_results=utf8");
//mysql_query("SET character_set_client=utf8");
//mysql_query("SET character_set_connection=utf8");

$SQL = mysql_query("
SELECT
sql_rank.pvp,
`char`.name
FROM
sql_rank
Inner Join `char`
ON (sql_rank.char_id=char.char_id)
ORDER BY
sql_rank.pvp DESC
LIMIT 3
");

	while( $fetch = mysql_fetch_array( $SQL )){
		$name = $fetch [name];
		$pvp_point = $fetch [pvp];
		echo htmlspecialchars($name,ENT_COMPAT,TIS-620)." $name [คะแนน: $pvp_point]<br />\n";
	}
	
echo "รหัส 65 ใช้ฟังก์ชั่น Chr(65) :".chr(65).":<br>";
echo "รหัส 161 ใช้ฟังก์ชั่น Chr(161) :".chr(161).":<br>";
echo "รหัส 160 ใช้ฟังก์ชั่น Chr(160) :".chr(149).":<br><hr>";
echo "อักษร A ใช้ฟังก์ชั่น Ord(A) :".ord(A)."<br>";
echo "อักษร ก ใช้ฟังก์ชั่น Ord(ก) :".ord(ก)."<br><hr>";

$string = "bamboolabcode";
$arr = str_split ( $string, 1 );
$run = str_split ( $name, 1 );
print_r ( $arr );
print_r ( $run );
echo ord($run[2]);
	
?>

</body>

</html>
code ด้านบนผมใส่อย่างอื่นเพิ่มไปเพื่อทดสอบอย่างอื่นเพิ่มไปด้วยนะครับ ตัวที่แสดงผลออกมาคือ แค่ตรงนี้

Code: Select all

$hostdb = "***";
$userdb = "***";
$passdb = "***";
$db_game = "***";

mysql_connect($hostdb, $userdb, $passdb) or die("ติดต่อฐานข้อมูลไม่ได้");
mysql_select_db($db_game) or die("เลือกฐานข้อมูลไม่ได้");

mysql_query("SET NAMES TIS620");
//mysql_query("SET character_set_results=utf8");
//mysql_query("SET character_set_client=utf8");
//mysql_query("SET character_set_connection=utf8");

$SQL = mysql_query("
SELECT
sql_rank.pvp,
`char`.name
FROM
sql_rank
Inner Join `char`
ON (sql_rank.char_id=char.char_id)
ORDER BY
sql_rank.pvp DESC
LIMIT 3
");

	while( $fetch = mysql_fetch_array( $SQL )){
		$name = $fetch [name];
		$pvp_point = $fetch [pvp];
		echo htmlspecialchars($name,ENT_COMPAT,TIS-620)." $name [คะแนน: $pvp_point]<br />\n";
	}
เพราะว่า มันมี CP ของฝรั่งเขาทำไว้ ซึ่งแสดงผลในเวป ได้ชื่อถูกต้องหมดเลย (ตรงกับในเกม) แต่ผมเขียนแบบนี้แล้วมันมีอักขระประหลาด ๆ เหมือนที่แสดงไว้ในภาพครับ

หมายเหตุ: ผมไม่ได้มีความรู้เรื่อง mysql กับ PHP มากนัก จริง ๆ มีน้อย เพียงแต่พอเข้าใจหลักการ และเขียน script ของเกมพอได้ ซึ่งตัว script มันก็มาจากภาษา C อีกทีแต่ไม่ได้มีความสามารถมากอะไร มีขอบเขตจำกัด ทำให้ผมเขียนได้ และเข้าใจหลักการอยู่บ้าง แต่ลงลึกระดับพวกนี้ผมไม่สามารถแก้ไขได้ครับ

ขอบคุณครับ

Re: การแสดงอักขระพิเศษ (พิมพ์ผ่านคีย์บอร์ดด้วยปุ่ม Alt+ตัวเลข) บนเวปทำอย่างไงครับ

Posted: 18/06/2011 8:12 pm
by mindphp
แบบนี้้ต้องเขียน function มาแปลง Alt+*** เป็น ตัวอักษร
แล้วล่ะครับ

Re: การแสดงอักขระพิเศษ (พิมพ์ผ่านคีย์บอร์ดด้วยปุ่ม Alt+ตัวเลข) บนเวปทำอย่างไงครับ

Posted: 18/06/2011 9:01 pm
by BasicNeeds
ขอบคุณครับ เดี๋ยวผมคงต้องค่อย ๆ ทยอยดูว่า function ไหนใน CP ที่มันแปลงตรงนี้ได้ อาจจะนานหน่อย -*- เพราะ cp เขาเขียนไว้มีความสามารถและรายละเอียดค่อนข้างเยอะ แต่อย่างน้อยก็สบายใจขึ้นว่า มาถูกทาง

Re: การแสดงอักขระพิเศษ (พิมพ์ผ่านคีย์บอร์ดด้วยปุ่ม Alt+ตัวเลข) บนเวปทำอย่างไงครับ

Posted: 19/06/2011 4:48 pm
by ACAD-2008
เขียนเองขึ้นมาใหม่ก็ได้ครับ
ใช้ function เกี่ยวกับการค้นหาและแทนที่เข้ามาช่วยอีกต่อหนึ่ง