รบกวนดู ERROR [AJAX:PHP] ให้ผมหน่อยครับ ผมควรแก้ยังไงครับ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

แบบว่าเพิ่งหัดเล่นครับ… ปัญหาคือเวลากรอก ภาษาอังกฤษมันไม่ error แต่ พอเป็น ภาษาไทย มันฟ้องว่า

XML Parsing Error: undefined entity Location: http://little-cow.sianscripts.com/PROJECT/AJAX1/quickstart.php?name=%E0%B8%AA Line Number 1, Column 67:

รบกวนดู ตัวอย่างที่นี่ ครับ

อันนี้เป็นตัวอย่าง code ผมไปเอามาจาก ที่นี่ ครับ http://www.packtpub.com/files/Ajax_SampleChapter.pdf

1. quickstart.html

<html>
  <head>
  <title>ทดสอบ AJAX with PHP : Quickstart</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="text/javascript" src="quickstart.js"></script>
  </head>
  <body onload='process()'>
    กรุณากรอกชื่อของท่าน ครับ : 
    <input type="text" id="myName" />
    <div id="divMessage" />
  </body>
</html>

2. quickstart.js

// สร้าง object xmlHttp จาก function createXmlHttpRequestObject()
 
var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject(){
  // กำหนดตัวแปร เอามาซักอัน
  var xmlHttp;
  // ทำการตรวจสอบว่า web brower เป็น IE หรือชนิดอื่น เช่น firefox,opera
  if(window.ActiveXObject){
    try{
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }catch (e){
      xmlHttp = false;
    }
  }else{
    try{
      xmlHttp = new XMLHttpRequest();
    }catch(e){
      xmlHttp = false;
    }
  }
  if(!xmlHttp)
    alert("ไม่สามารถสร้าง XMLHttpRequest object ได้ครับ"); 
  else
    return xmlHttp;
}
 
 
// Process นี้จะเริ่มทำงานเมื่อ Browser เรียก ไฟล์ quickstart.html
function process(){
    // ทำการตรวจสอบ readyState ของ xmlHttp โดย ถ้า state 
    // 0 = ยังไม่เริ่มทำงาน
    // 1 = กำลังมีการถ่ายโอนข้อมูล
    // 2 = โอนถ่ายข้อมูลเสร็จแล้ว
    // 3 = อยู่ระหว่างการทำงาน
    // 4 = เสร็จสิ้นการทำงานอย่างสมบูรณ์
  if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
    // ทำการดึงค่าข้อมูลจาก form ที่ user กรอกในไฟล์ quickstart.html
    //name = encodeURIComponent(document.getElementById("myName").value);
    var name = document.getElementById("myName").value;
    // นำค่าที่ดึงมาได้ แล้วส่งผ่านไปให้ไฟล์ quickstart.php ต่อไปโดย method GET
    xmlHttp.open("GET","quickstart.php?name="+name, true);
    // ตรวจสอบ response โดยฟังก์ชั่น handleServerResponse
    xmlHttp.onreadystatechange = handleServerResponse;
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); 
    xmlHttp.send(null);
  }else{
    setTimeout('process()',1000);
  }
}
 
// function นี้จะทำงานทันทีเมื่อ มีการรับข้อความจาก server
function handleServerResponse(){
    // ตรวจสอบว่า เสร็จสิ้นการทำงานจาก server สมบูรณ์
  //if(xmlHttp.readyState == 4){
    // ตรวจสอบว่า การถ่ายโอนข้อมูล เสร็จสมบูรณ์
    if(xmlHttp.status == 200){
      // ทำการ แตกข้อมูล ที่ส่งมาจาก server ผ่านมา โดย XML
      //xmlHttp.setContentType("text/xml;charset=UTF-8");
      xmlResponse = xmlHttp.responseXML;
 
      // ทำการ ดึง element ต่างๆ ที่อยู่ใน โครงสร้างของ XML ออกมา
      xmlDocumentElement = xmlResponse.documentElement;
 
      // ดึงข้อมูลออกมา โดยเรารู้ว่าข้อมูลที่ส่งมาให้เรานั้นอยู่ element แรกของ XML
      helloMessage = xmlDocumentElement.firstChild.data;
      // แสดงผลที่หน้าจอ 
      document.getElementById("divMessage").innerHTML = '<i>' + helloMessage + '</i>';
      // หลังจากนั้น ก็เรียกไปเรื่อยๆๆ เพราะถ้าหากมีการ update ในการกรอก ก็เริ่มไปทำตั้งแต่ function process() ใหม่ ทุกๆ 1 วินาที
      setTimeout('process()',1000);
    }else{
      alert("There was problem accesing the server : " + xmlHttp.statusText);
    }
  //}
}

2. quickstart.php

<?
  header("Content-Type: text/xml; charset=utf-8");
  echo '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>';
  echo '<response>';
  $name = $_GET['name'];
  $userNames = array('SOMSAK', 'ARREERAT', 'WATTANA');
  if(in_array(strtoupper($name), $userNames))
    echo "สวัสดีครับ, อิๆ คุณเป็นคนพิเศษของเรา ".htmlentities($name);
  else if(trim($name)=='')
    echo "อ่าว , แล้วคุณเป็นใครละเนี่ย โปรดบอกชื่อ ด้วย คร๊่าบบ !";
  else
    echo htmlentities($name).", คุณคงต้องกรอกชืออีกครั้งหล่ะครับ";
  echo '</response>';
?>

ก่อนอื่นต้องออกตัวก่อนนะครับ ว่าผมก็เป็นคนนึงที่เริ่มศึกษา Ajax เหมือนกัน
ผมลองแก้ดังนี้ครับแล้ว ใช้งานได้ครับ
<?
header("Content-Type: text/xml; charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '';
$name = $_GET['name'];
$userNames = array('SOMSAK', 'ARREERAT', 'WATTANA');
if(in_array($name, $userNames))
echo "สวัสดีครับ, อิๆ คุณเป็นคนพิเศษของเรา ".$name;
else if(trim($name)=='')
echo "อ้าว , แล้วคุณเป็นใครละเนี่ย โปรดบอกชื่อ ด้วย คร๊าบ !";
else
echo $name.", คุณคงต้องกรอกชืออีกครั้งหล่ะครับ";
echo '
';
?>

แล้วเปลี่ยน Encoding ของทุกไฟล์ เป็น UTF-8 ครับ
ลองดูนะครับ

ขอบคุณครับผม...
อืมม แต่ก็ยังไม่ได้ครับ ผมลอง save เป็น UTF-8 แล้วนะครับแต่ก็ยังไม่ได้ครับ
คือตอนนี้ผม พยายามให้ ทุกไฟล์เป็น UTF-8 ให้หมดครับ โดยเฉพาะในส่วนของการส่งข้อมูลและการแสดงผลที่เป็นภาษาไทย (จริงๆแล้วเคยลองไปใช้ tis-620 เหมือนกันครับ มันก็ได้นะครับ แต่ผมอยากทำให้มันเป็น UTF-8 ให้หมดครับ)

ขอบคุณครับ อีกครั้งครับ..

sugree's picture

ลองเปลี่ยนเป็น htmlentities($name, ENT_COMPAT, "UTF-8");

ลองแล้วครับแต่ก็ยังไม่ได้ครับ...
งั้นผมขอถามเพิ่มครับ

จากตัวอย่างสมมติ ว่าผม กรอก ห ตัวเดียว มันจะฟ้องอย่างนี้

XML Parsing Error: undefined entity Location: http://localhost/AJAX/UTF/quickstart.php?name=%E0%B8%AB Line Number 1, Column 67:

ตรงที่มัน return มา %E0%B8%AB มันเป็นรหัสอะไรเหรอครับ
มันเป็น UTF-8 รึเปล่าครับ...ผมคิดว่าผมอาจจะต้องเอาตรงนี้ผมา convert เพื่อให้ แสดงผลเป็นภาษาไทยให้ได้ อีกทีครับ แต่ ผมไม่รู้ว่ามันเป็น รหัส อะไรอ่ะครับ

คงต้องรบกวนอีกรอบครับ..ขอบคุณทุกท่านมากครับ

%E0%B8%AB คือ "ห" นั่นแหล่ะครับ
ในตาราง utf8 ภาษาไทยเรามี prefix คือ E0

แต่ดู error แล้วเหมือนกับมีปัญหาเรื่อง XML Parser
่ผมไม่เคยใช้ php นะเลยไม่รู้ว่าเกี่ยวกับอะไร

sugree's picture

เหมือนจะได้แล้วนะ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น