Jump to content
php.lv forumi

XHTMLrequest


Paulinjsh

Recommended Posts

Problēma sekojoša: veicu XMLhttp request pieprasīju, bet kad man inutā parādās garumzīmes, tad vai nu tās ignorē vai arī neko neatrod. Kādam ir steidzīgs risinājums šai problēmai? Paldies jau iepriekš. Sorry par kļūdu topikā :)

Edited by Paulinjsh
Link to comment
Share on other sites

Hehe, tieši šodien ar Gacha risinājām šo problēmu. Tipa ja input laukā ir UTF-8 teksts, un to padod ar GET pieprasījumu izmantojot XMLHttpRequest, tad IE visu sabojā (ar FF viss labi). Ar POST gan vajadzētu būt visam ok. Tad nu ja vajag ar GET tik UTF-8 klāt, tad sanāca šāds risinājums (dubults escape):

<?php
 if (isset($_GET['xml'])) {
   header('Content-Type: text/xml; charset=UTF-8');
?>
<xml>
 <text><?php 
   function convert($txt) {
       $x = preg_replace('@%([^u]{2})@', '%u00$1', $txt);
       $x = preg_replace('@%u(.{4})@e', 'chr(hexdec(substr("$1",0,2))).chr(hexdec(substr("$1",2,2)))', $x);
       return iconv('UCS-2', 'UTF-8', $x);
   }
// ja vajag izdrukāt atpakaļ, tad atstājam escape'otu tekstu, jo tiks dekodēts ar unescape
   echo $_GET['text']; 
// ja vajag iekš php izmantot, tad pielietojam konvertāciju
   file_put_contents('bla', 'Tika saņemts: '.convert($_GET['text'])); 
//
 ?></text>
</xml>
<?php
 } else {
?>  
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <script type="text/javascript">
 <!--
   function getXMLHttpRequest() {
       var tryThese = [
           function () { return new XMLHttpRequest(); },
           function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
           function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
           function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); }
       ];
       for (var i=0, len=tryThese.length; i<len; ++i) {
           var func = tryThese[i];
           try {
               var x = func();
               if (typeof x != 'undefined') {
                   return x;
               }
           } catch (e) {
           }
       }
       return null;
   }
 
   function doit() {
       var xmlhttp = getXMLHttpRequest();
       var text = escape(escape(document.getElementById('inputs').value).replace(/\+/g, '%2B'));
       xmlhttp.open('GET', "?xml&text="+text, false);
       xmlhttp.send(null);
       var xml = xmlhttp.responseXML;
       try {
           document.getElementById('text').innerHTML = 'Recieved: ' + 
               unescape(xml.getElementsByTagName('text')[0].firstChild.nodeValue);
       } catch (e) {
           document.getElementById('text').innerHTML = 'Error: ' + e.message;
       }
       return false;
   }
 // -->
 </script>
</head>
<body>
 <a href="#" onclick="return doit();">click me!</a><br/>
 <input id="inputs" value="āšū īō++šž"ņčģē"/>
 <pre id="text"></pre>
</body>
<?php
 }
?>

Edited by bubu
Link to comment
Share on other sites

Problēma sekojoša: veicu XMLhttp request pieprasīju, bet kad man inutā parādās garumzīmes, tad vai nu tās ignorē vai arī neko neatrod. Kādam ir steidzīgs risinājums šai problēmai? Paldies jau iepriekš. Sorry par kļūdu topikā :)

20171[/snapback]

 

enkodingi client/server pareizi ? jābūt vienādiem. citādi putra.

man nav bijis problēmu.

Link to comment
Share on other sites

Es ar brīnījos, ka uz IE neiet tāpat, vienk pašam iepriekš nebij vajadzības datus sūtīt caur GET pieprasījumu, jo tam parasti POST izmantoju, kur nav tāda problēma.

Edited by bubu
Link to comment
Share on other sites

Problēmas atkal man te ir ar & un citiem spec simboliem. Risinājums ir kodēt kkā un tad dekodēt. Man tiek atgiezts dati no datu bāzes masīvā un ar eval( xmlhttp.responseText ) izildīts. Vēl prob sagādā ' vai " atkarībā kā rakstu masīva elementus ar " vai ', jo ja db ir ieraksts, kurš satur ', tad rodas kļūdas. Zinu, ka kādam ir risinājums. Varbūt padalīsieties.

Vēlreiz liels paldies.

Link to comment
Share on other sites

Emm, nezinu kur tev kļūdas rodās. Ja jau tu tur eval pielieto, tad skaties, lai php skripts izvada korektu JS kodu un tas ir viss. Par kautkādu ' vai " pārveidošanu nezinu ko tu putrojies, tur nevajadzētu būt atšķirībai no parasta JS koda.

 

A par & simbolu vienīgi kur var rasties tev problēma, ir padodot kā POST vērtību. Ja jā, tad taču vajag JS escape() fju pielietot tām vērtībām. Citādi php nespēs atšķirt, kurš & ir īstais un kurš nē.

Link to comment
Share on other sites

Nu tad jau tā nav nekāda XMLHttpRequest vaina!

Tā ir tava vaina php skriptā, ka šis nekorektu JS kodu izvada. Tas tev arī jālabo.

 

P.S. var x = new array(a,b,...); vietā raksti var x = [a,b,..]; būs īsāk :)

Link to comment
Share on other sites

×
×
  • Create New...