2009-05-28 12 views
5

मैं एक HTML फॉर्म से एक mysql डेटाबेस में पारित डेटा डालने के लिए, फ्रेमवर्क (प्रोटोटाइप, jQuery, आदि) के बिना जावास्क्रिप्ट का उपयोग करने की कोशिश कर रहा हूं। मैंने यह काम करने में कामयाब रहा है, लेकिन मेरी भाषा (æøå) में आमतौर पर उपयोग किए जाने वाले कुछ विशेष पात्रों में समस्या आती है। utf-8 इन वर्णों का समर्थन करता है, और जब मैं जावास्क्रिप्ट छोड़ देता हूं तो सब कुछ ठीक काम करता है। हालांकि जब मैं जावास्क्रिप्ट पोस्ट फ़ंक्शन के माध्यम से HTML फॉर्म की सामग्री को पास करने और अपनी कार्यशील PHP स्क्रिप्ट के साथ क्वेरी निष्पादित करने का प्रयास करता हूं, तो प्रत्येक æøå को Ã⠀ SA में परिवर्तित किया जाता है।क्या जावास्क्रिप्ट बल विशिष्ट वर्णमाला है?

इसे तोड़ने के लिए, जावास्क्रिप्ट किसी भी तरह से एक विशिष्ट वर्णमाला को मजबूर करता है जब कोड में कोई अन्य निर्धारित नहीं होता है? मैंने जावास्क्रिप्ट पोस्ट और PHP फ़ाइल के साथ-साथ HTML फॉर्म के शीर्षलेख में वर्णसेट निर्दिष्ट करने का प्रयास किया है।

मेरा मानना ​​है कि यह कुछ गलत या मेरे जावास्क्रिप्ट फ़ाइल में लापता होना चाहिए, formpost.js:

function sendText(visbool){ 
    var http =new GetXmlHttpObject(); 
    var url = "sendtext.php"; 
    var ovrskrift = document.form1.overskrift.value; 
    var cont = document.form1.content.value; 

    var params = "overskrift=" + ovrskrift + "&tekst=" + cont + "&visbool=" + visbool; 
    http.open("POST", url, true); 

    //Send the proper header information along with the request 
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.setRequestHeader("Content-length", params.length); 
    http.setRequestHeader("Connection", "close"); 

    http.onreadystatechange = function() {//Call a function when the state changes. 
    if(http.readyState == 4 && http.status == 200) { 
     // gjør noe smart her 
    } 
    } 
    http.send(params); 
} 


function GetXmlHttpObject() 
{ 
var objXMLHttp=null; 
if (window.XMLHttpRequest) 
    { 
    objXMLHttp=new XMLHttpRequest(); 
    } 
else if (window.ActiveXObject) 
    { 
    objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
return objXMLHttp; 
} 

sendtext.php:

<?php 
//variabler for spørring 
$date= date('Y-m-d'); 
$overskrift= $_POST["overskrift"]; 
$ostr='36'; 
$tekst= $_POST["content"]; 
//$tekst="test tekst"; 
$istr='32'; 
$bilde=""; 
$style="onlyinfo.css"; 
//$vis=$_POST['visbool']; 
$vis=0; 

require ('../config.php'); // henter informasjon om database tilkoblingen fra config.php 

if (!$con){die('Could not connect: ' . mysql_error());} // lager feilmelding hvis tilkoblingen mislyktes 

// spørring for databasen, konstrueres etter variablene som er angitt ovenfor 
$sql="INSERT INTO tbl_info(dato,overskrift_tekst,overskrift_str,infotekst_tekst,infotekst_str,bilde,style,vismeg) VALUES('" . $date . "','" . $overskrift . "','" . $ostr . "','" . $tekst . "','" . $istr . "','" . $bilde . "','" . $style . "','" . $vis . "')"; 
$result = mysql_query($sql); // kjører spørring og lagrer resultat i $result 

mysql_close($con); // lukker database tilkoblingen 
?> 

createslide.php: (के लिए विस्तार सुरक्षित .php भविष्य कोड कार्यान्वयन)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> 
<head> 
<title>inforMe: Legg til side</title> 
<link type="text/css" rel="stylesheet" href="./css/style.css" id="adminss"> 
<script src="./js/formpost.js"></script> 
<script type="text/javascript" src="./tinymce/jscripts/tiny_mce/tiny_mce.js"></script> 
<script type="text/javascript"> 
tinyMCE.init({ 
    mode : "textareas" 
}); 
</script> 

</head> 
<body> 
<div class="imgupload"> 
    <input type="button" value="Last opp bilde"> <img src="" /> 
</div> 
<div class="form"> 
    <form name="form1" method="post" action="sendtext.php"> 
    <label for="overskrift">Overskrift:</label> 
    <input type="text" size="70" id="overskift" name="overskrift"><br /> 
    <label for="content">Tekst:</label> 
    <textarea id="content" name="content" cols="50" rows="15">This is some content that will be editable with TinyMCE.</textarea> 
    <input type="button" value="save draft" onclick="sendText(0)"/> 
    <input type="button" value="save and publish" onclick="sendText(1)"/> 
    <input type="submit" value="regular submit button"/> 
    </form> 
</div> 

</body> 
</html> 

एनबी! मुझे नहीं पता कि यह जानकारी कहां रखनी है .. अच्छा .. मैंने यहां इसके साथ जाने का फैसला किया: सबसे पहले सभी अच्छे सुझावों के लिए धन्यवाद। मुझे विश्वास है कि सवाल का जवाब दिया गया था। मेरी समस्या के अनुसार, यह केवल आंशिक रूप से हल किया गया है।

ऐसा लगता है कि अगर मैं लैटिन -1 वर्णमाला के साथ एक नया MySQL डेटाबेस बना रहा हूं और आईएसओ -885 9 -1 पर अपनी फाइलों में वर्णमाला विकल्प बदलता हूं तो यह यूटीएफ -8 वर्णसेट लाइन के साथ कहीं भी खो गया है, यह ठीक काम करता है । चूंकि मेरा परीक्षण सेटअप सभी नारियल सॉफ़्टवेयर (ब्राउज़र, डीबी सर्वर, आदि) पर आधारित है, मुझे लगता है कि जहां भी यह अन्यथा निर्दिष्ट नहीं है, यह आईएसओ -885 9 -1

एनबीबी! और अब यह सब ठीक है। जब मैं जोड़ता हूं तो सब ठीक काम करता है:

शीर्षलेख ('सामग्री-प्रकार: टेक्स्ट/सादा; charset = utf-8');

मेरी sendtext.php फ़ाइल के शीर्ष पर।

+0

यह प्रश्न बहुत समय पहले पोस्ट किया गया था, लेकिन मुझे यह कहना है: कृपया मुझे बताएं कि यह आपका वास्तविक SQL-हैंडलिंग कोड नहीं है, क्योंकि यह आपको SQL-इंजेक्शन हमलों के लिए व्यापक रूप से खुला छोड़ देता है ... – Epcylon

उत्तर

7

इस तरह सामग्री प्रकार शीर्षक के चारसेट जोड़कर प्रयास करें:

"application/x-www-form-urlencoded; charset=utf-8;" 

इसके अलावा, अपने दस्तावेज़ में आप इसे निर्दिष्ट करना चाहिए शीर्षक में UTF-8 है:

<META http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

आप चाहिए शायद आपके सभी मूल्यों पर एन्कोडुरि (मान) भी करें ताकि यह सही ढंग से यूआरएल एन्कोड किया जा सके।

+1

मुझे ऐसा लगता है यह: "एप्लिकेशन/एक्स-www-form-urlencoded; charset: utf-8;" इस तरह होना चाहिए: "एप्लिकेशन/एक्स-www-form-urlencoded; charset = utf-8;" या मैं इसे गलत कर रहा हूं। मैंने इसे अपनी जावास्क्रिप्ट फ़ाइल में डालने की कोशिश की। – mzaz

+0

आप सही हैं, यह एक टाइपो था। – PQW

+0

या तो (लोअर केस) "मेटा" (यदि आप एक्सएचटीएमएल लिख रहे हैं) या "/" (यदि आप HTML लिख रहे हैं) के बिना होना चाहिए। ध्यान दें कि एक वास्तविक HTTP शीर्षलेख मेटा से किसी भी दावों को पार करेगा। – Quentin

3

आंतरिक रूप से, जावास्क्रिप्ट यूनिकोड का उपयोग करता है, इसलिए यह बिना किसी समस्या के आपके उमोट्स स्टोर कर सकता है। नोट: यूनिकोड! = यूटीएफ -8।

लेकिन फिर, आप उस पाठ को अपने सर्वर पर भेजने की कोशिश करते हैं और यहां, समस्या शुरू होती है। ब्राउज़र और आपके सर्वर के बीच तार (इंटरनेट) यूनिकोड का समर्थन नहीं करता है, इसलिए ब्राउज़र को डेटा एन्कोड करना होगा। तो यह यूनिकोड को यूटीएफ -8 बाइट स्ट्रीम में परिवर्तित करता है।

सर्वर की ओर, आपको डेटा को यूनिकोड में वापस परिवर्तित करना होगा।

1

यह एक को मजबूर नहीं करता है, लेकिन इसे पढ़ने के लिए एचटीएमएल के वर्णमाला के आधार पर, दोनों प्रदर्शन वर्णसेट मेटाडेटा में सेट किया गया है और जिस तरह से फ़ाइल प्रारूप सहेजा गया है, यह सभी मजेदार ...

तो, जब आप HTML और जावास्क्रिप्ट को सहेजते हैं, तो यूटीएफ -8 दोनों को सहेजें।

इसके अलावा, PHP में आप कुछ mb_internal_encoding कार्रवाई की आवश्यकता हो सकती ...

0

जावास्क्रिप्ट नहीं 'शक्ति' ऐसे ही एक कोड पेज करता है। परिणाम प्राप्त करने के लिए आप विस्तारित ASCII पास करने के लिए केवल बचें() और अनसस्केप() का उपयोग करना चाहते हैं।

एफ

+0

यानी अलर्ट (बचें ("æøå")); चेतावनी (अनदेखा ("% E6% F8% E5")); – Fraser

1

मुझे लगता है कि आप encodeURIComponent उपयोग करने का प्रयास कर सकते हैं।

var ovrskrift = encodeURIComponent(document.form1.overskrift.value); 

आपको escape के बजाय इसका उपयोग करना चाहिए। इस पृष्ठ पर और पढ़ें: Comparing escape(), encodeURI(), and encodeURIComponent()

इसमें कहा गया है:

[...] आप भागने के उपयोग() जब भी संभव से बचना चाहिए। सबसे अच्छा विकल्प आमतौर पर encodeURIComponent() है। [...]

... और यह मेरे अनुभवों में भी सही लगता है।

1

दो अपरीक्षित सुझाव (अपने कोड नमूना के संबंध में):

(1) वर्णसेट विशेषता के साथ अपने बाहरी जे एस संदर्भ:

<script src="file.js" type="text/javascript" charset="utf-8"></script> 

(2) हो सकता है कि कुछ और पीएचपी पर किया जा सकता पट्टी गैर UTF8 वर्ण की तरह पक्ष, ?:

<?php 
$result = iconv("UTF-8","UTF-8//IGNORE", $result); 
?> 
2

मुझे पता है इस सवाल का पहले से ही दो साल पहले पोस्ट किया गया था, लेकिन कारण PQW के जवाब से काम करता है कि ग्राहक (ब्राउज़र) हमें उत्तर चाहिए उसी चरित्र सेट को पृष्ठ पर सेट किया गया था (इस प्रकार मेटा-टैग कार्यों में यूटीएफ -8 निर्दिष्ट करना)। जावास्क्रिप्ट का उपयोग इस मूल धारणा को नहीं बदलता है (इसलिए उत्तर सही होगा कि जावास्क्रिप्ट शामिल था या नहीं)।

सर्वर प्रतिक्रिया शीर्षलेख में वर्ण सेट निर्दिष्ट करने के लिए "सबसे सही विधि" है, लेकिन क्योंकि यह हमेशा संभव नहीं होता है (शायद आपके पास उनके ऊपर या अन्य कारणों पर कोई नियंत्रण नहीं है), मेटा -प्राप्च इसे प्राप्त करने का अगला सबसे अच्छा तरीका है।

+0

पीक्यूडब्ल्यू के उत्तर के लिए एक अच्छा फुटनोट। आप एक महत्वपूर्ण बिंदु पर स्पर्श करते हैं: आप एचटीएमएल पेज का अनुरोध कर रहे हैं, और एचटीएमएल पेज जेएस को खींच रहा है। तो वास्तव में, आपको 'हेडर' एचटीएमएल फाइल में इस्तेमाल किए गए एन्कोडिंग पर ध्यान देना चाहिए, उचित हेडर भेजकर (जब द्वारा परोसा जाता है एक स्क्रिप्ट, उदाहरण के लिए) या मेटा-टैग सेट करना। – kasimir

संबंधित मुद्दे