Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
thoidis
Δημοσιεύσεις: 14
Εγγραφή: 19 Ιαν 2006 22:01
Τοποθεσία: ΔΡΑΜΑ

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από thoidis » 08 Ιαν 2010 13:39

Το συγκεκριμένο παράδειγμα μετατρέπει μέσα σε ένα text πεδίο κατά την πληκτρολόγηση:
1. ΚΕΦΑΛΑΙΑ
2. ΜΙΚΡΑ
3. ΑΓΓΛΙΚΑ
4. ΕΛΛΗΝΙΚΑ

Ο Κωδικάς html, javascript περιέχει εντολές σε html για δημιουργία 4 φορμών (μία για κάθε περίπτωση) και τις ανάλογες εντολές σε ajax, javascript. Δουλεύει προς το παρόν σε win-1253 και iso 8859-7 (δεν δούλεψε σε utf-8 βγάζει πρόβλημα στα ελληνικά)

Κώδικας: Επιλογή όλων

<html xmlns="http&#58;//www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7" />
<title>Ajax example</title>
<style>
 
form&#123;
   text-align&#58;center;
   width&#58;390px;
   margin&#58;0px;
   padding&#58;5px;
   background-color&#58;#fff;
   border&#58;1px solid #ccc;
 
&#125;

</style>
</head>
 
<body>
 
<script language="javascript" type="text/javascript">
<!--
function ltrim&#40;str, chars&#41; &#123;
	chars = chars || "\\s";
	return str.replace&#40;new RegExp&#40;"^&#91;" + chars + "&#93;+", "g"&#41;, ""&#41;;
&#125;


// Get the HTTP Object
function getHTTPObject&#40;&#41;&#123;
   if &#40;window.ActiveXObject&#41; return new ActiveXObject&#40;"Microsoft.XMLHTTP"&#41;;
   else if &#40;window.XMLHttpRequest&#41; return new XMLHttpRequest&#40;&#41;;
   else &#123;
      alert&#40;"Your browser does not support AJAX."&#41;;
      return null;
   &#125;
&#125;   
 

var httpObject = null;

// Implement business logic    
function doWork2&#40;&#41;&#123;    
    httpObject = getHTTPObject&#40;&#41;;
    if &#40;httpObject != null&#41; &#123;
        httpObject.open&#40;"GET", "trans.php?fl=U&inputText="
            +document.getElementById&#40;'inputText2'&#41;.value, true&#41;;
        httpObject.send&#40;null&#41;; 
        httpObject.onreadystatechange = setOutput2;
    &#125;
&#125;

// Change the value of the outputText field
function setOutput2&#40;&#41;&#123;
    if&#40;httpObject.readyState == 4&#41;&#123;
        document.getElementById&#40;'inputText2'&#41;.value 
            = ltrim&#40;httpObject.responseText&#41;;
    &#125;
&#125;
// Implement business logic    
function doWork3&#40;&#41;&#123;    
    httpObject = getHTTPObject&#40;&#41;;
    if &#40;httpObject != null&#41; &#123;
        httpObject.open&#40;"GET", "trans.php?fl=L&inputText="
            +document.getElementById&#40;'inputText3'&#41;.value, true&#41;;
        httpObject.send&#40;null&#41;; 
        httpObject.onreadystatechange = setOutput3;
    &#125;
&#125;

// Change the value of the outputText field
function setOutput3&#40;&#41;&#123;
    if&#40;httpObject.readyState == 4&#41;&#123;
        document.getElementById&#40;'inputText3'&#41;.value 
            = ltrim&#40;httpObject.responseText&#41;;
    &#125;
&#125;

// Implement business logic    
function doWork4&#40;&#41;&#123;    
    httpObject = getHTTPObject&#40;&#41;;
    if &#40;httpObject != null&#41; &#123;
        httpObject.open&#40;"GET", "trans.php?fl=EN&inputText="
            +document.getElementById&#40;'inputText4'&#41;.value, true&#41;;
        httpObject.send&#40;null&#41;; 
        httpObject.onreadystatechange = setOutput4;
    &#125;
&#125;

// Change the value of the outputText field
function setOutput4&#40;&#41;&#123;
    if&#40;httpObject.readyState == 4&#41;&#123;
        document.getElementById&#40;'inputText4'&#41;.value 
            =ltrim&#40;httpObject.responseText&#41;;
    &#125;
&#125;

// Implement business logic    
function doWork5&#40;&#41;&#123;    
    httpObject = getHTTPObject&#40;&#41;;
    if &#40;httpObject != null&#41; &#123;
        httpObject.open&#40;"GET", "trans.php?fl=EL&inputText="
            +document.getElementById&#40;'inputText5'&#41;.value, true&#41;;
        httpObject.send&#40;null&#41;; 
        httpObject.onreadystatechange = setOutput5;
    &#125;
&#125;

// Change the value of the outputText field
function setOutput5&#40;&#41;&#123;
    if&#40;httpObject.readyState == 4&#41;&#123;
        document.getElementById&#40;'inputText5'&#41;.value 
            = ltrim&#40;httpObject.responseText&#41;;
    &#125;
&#125;

//-->
</script>
 
<form name="testForm2">
  <p>ΚΕΦΑΛΑΙΑ</p>
  <p>Input text&#58; 
    <input type="text"  onkeyup="doWork2&#40;&#41;;" name="inputText2" id="inputText2" /> 
    <br />
  </p>
</form>

<form name="testForm3">
  <p>ΜΙΚΡΑ</p>
  <p>Input text&#58; 
    <input type="text"  onkeyup="doWork3&#40;&#41;;" name="inputText3" id="inputText3" /> 
    <br />
</p>
</form>
<form name="testForm4">
  <p>ΑΓΓΛΙΚΑ</p>
  <p>Input text&#58; 
    <input type="text"   onkeyup="doWork4&#40;&#41;;" name="inputText4" id="inputText4" /> 
    </p>
</form>
<form name="testForm5">
  <p>ΕΛΛΗΝΙΚΑ</p>
  <p>Input text&#58; 
    <input type="text"   onkeyup="doWork5&#40;&#41;;" name="inputText5" id="inputText5" /> 
    </p>
</form>

</body>
</html>
Ο Κώδικας PHP να αποθηκευθεί σε αρχείο με όνομα trans.php

Κώδικας: Επιλογή όλων

<?header&#40;"Content-Type&#58; text/html; charset=iso-8859-7"&#41;; ?> 
<?php 
   if &#40;isset&#40;$_GET&#91;"inputText"&#93;&#41;&#41;
      $input=$_GET&#91;"inputText"&#93;;
  else
      die &#40;""&#41;;
      
  if &#40;isset&#40;$_GET&#91;"fl"&#93;&#41;&#41;&#123;
     switch&#40;$_GET&#91;"fl"&#93;&#41;&#123;
       case "L"&#58; 
                     $en="_ΑΒΓΔΕΈΖΗΉΘΙΊΚΛΜΝΞΟΌΠΡΣΣΤΥΎΦΧΨΩΏABCDEFGHIJKLMNOPQRSTUVWXYZ";
					           $el="_αβγδεέζηήθιίκλμνξοόπρσςτυύφχψωώabcdefghijklmnopqrstuvwxyz";
                     $ret="";
                     for &#40;$i=0; $i<strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=substr&#40;$input,$i,1&#41;;
                         if &#40;strpos&#40;$en,$letter,0&#41;&#41; 
                            $ret=$ret . substr&#40;$el,strpos&#40;$en,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
					           echo  trim&#40;$ret&#41;;
                        				 
                     break;
       case "U"&#58;        
                    
					           $el="_αβγδεέζηήθιίκλμνξοόπρσςτυύφχψωώabcdefghijklmnopqrstuvwxyz";
                     $en="_ΑΒΓΔΕΈΖΗΉΘΙΊΚΛΜΝΞΟΌΠΡΣΣΤΥΎΦΧΨΩΏABCDEFGHIJKLMNOPQRSTUVWXYZ";
                     $ret="";
                     for &#40;$i=0; $i<strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=substr&#40;$input,$i,1&#41;;
                         if &#40;strpos&#40;$el,$letter,0&#41;&#41; 
                            $ret=$ret . substr&#40;$en,strpos&#40;$el,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
	      echo  trim&#40;$ret&#41;;
                        				 
                     break;
       case "EN"&#58;   
					           $el="_αβγδεζηήθιίκλμνξοόπρσςτυύφχψωώΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ";
                     $en="_abgdezhhuiiklmnjooprsstyyfxcvvABGDEZHUIKLMNJOPRSTYFXCV";
                     $ret="";
                     for &#40;$i=0; $i<strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=substr&#40;$input,$i,1&#41;;
                         if &#40;strpos&#40;$el,$letter,0&#41;&#41; 
                            $ret=$ret . substr&#40;$en,strpos&#40;$el,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
	 echo  trim&#40;$ret&#41;;
                        				 
                 break;
       case "EL"&#58;    
                     $en="_abgdezhuiklmnjoprstyfxcvwABGDEZHUIKLMNJOPRSTYFXCVW";
					           $el="_αβγδεζηθικλμνξοπρστυφχψωςΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩς";
                     $ret="";
                     for &#40;$i=0; $i<strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=substr&#40;$input,$i,1&#41;;
                         if &#40;strpos&#40;$en,$letter,0&#41;&#41; 
                            $ret=$ret . substr&#40;$el,strpos&#40;$en,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
	   echo  trim&#40;$ret&#41;;
                        				 
                    break;
	  default&#58;
         echo "!error";		
     &#125;
  &#125;
 
?>

Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!

alexsoft

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από alexsoft » 08 Ιαν 2010 13:48

Ναι στο UTF8 θα έχει πρόβλημα εφόσον χρησιμοποιείς τις function

strlen, substr, strpos κλπ, οι οποίες δεν υποστηρίζουν unicode.

Χρησιμοποίησε είτε multibyte (mb_) functions, είτε κάποια βιβλιοθήκη UTF8.

Άβαταρ μέλους
thoidis
Δημοσιεύσεις: 14
Εγγραφή: 19 Ιαν 2006 22:01
Τοποθεσία: ΔΡΑΜΑ

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από thoidis » 08 Ιαν 2010 19:11

Δεν είναι το πρόβλημα στις συναρτήσεις... αυτές τις άλλαξα...
το πρόβλημα είναι ότι σε utf-8 όταν έχουμε ελληνικά επιστρέφει τρελούς χαρακτήρες και βγάζει error η σελίδα...

παράδειγμα www.megaplan.gr/ajax/ajax_utf.html
Η επιστροφή των χαρακτήρων με την echo δίνουν το παρακάτω λάθος συστήματος

Κώδικας: Επιλογή όλων

 Λεπτομέρειες σφαλμάτων ιστοσελίδας

Παράγοντας χρήστη&#58; Mozilla/4.0 &#40;compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; FDM; .NET CLR 3.5.30729; InfoPath.1; .NET CLR 3.0.30729&#41;
Χρονική σήμανση&#58; Fri, 8 Jan 2010 16&#58;54&#58;03 UTC


Μήνυμα&#58; Σφάλμα συστήματος&#58; -1072896748.

Γραμμή&#58; 118
Χαρακτήρας&#58; 9
Κώδικας&#58; 0
URI&#58; http&#58;//www.megaplan.gr/ajax/ajax_utf.html

όπου υπάρχει η εντολή
document.getElementById('inputText2').value = ltrim(httpObject.responseText);
Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από fafos » 08 Ιαν 2010 19:13

sozeis to arxeio se utf-8 xoris bom?
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

alexsoft

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από alexsoft » 08 Ιαν 2010 19:22

Αυτό σου λέω....... ότι το πρόβλημα είναι στο UTF8..... εάν έχεις σωσμένο σε αρχείο ή βάση τα δεδομένα σε UTF8 και χρησιμοποιείς πάνω σε αυτά τις εντολές που σου ανέφερα.... τότε λαμβάνεις αλαμπουρνέζικα.

Εγώ έχω φτιάξει ένα αντικείμενο $utf8 και καλώ π.χ. την strlen έτσι $utf8->strlen(....)

Το UTF8 αποθηκεύει περισσότερα του ενός Byte για κάθε γράμμα, άρα η ενσωματωμένη strlen της PHP (και οι λοιπές που αναφέρω) δεν το διαβάζουν σωστά....

άκου τον παππού που στο λέει..... κάτι ξέρει και αυτός...

και αυτό που λέει και ο fafos, αποθήκευση των αρχείων ως UTF8 χωρίς BOM

Άβαταρ μέλους
thoidis
Δημοσιεύσεις: 14
Εγγραφή: 19 Ιαν 2006 22:01
Τοποθεσία: ΔΡΑΜΑ

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από thoidis » 08 Ιαν 2010 19:26

Το σώζω με το PSPad σε μορφή αρχείου utf-8 και το html και το php
Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!

Άβαταρ μέλους
thoidis
Δημοσιεύσεις: 14
Εγγραφή: 19 Ιαν 2006 22:01
Τοποθεσία: ΔΡΑΜΑ

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από thoidis » 08 Ιαν 2010 19:32

Μου λες δηλ ότι οι αλλαγές στις συναρτήσεις όπως φαίνονται παρακάτω δεν αρκούν

Κώδικας: Επιλογή όλων

<?header&#40;"Content-Type&#58; text/html; charset=utf-8"&#41;; ?> 
<?php 
   if &#40;isset&#40;$_GET&#91;"inputText"&#93;&#41;&#41;
      $input=$_GET&#91;"inputText"&#93;;
  else
      die &#40;""&#41;;
      
  if &#40;isset&#40;$_GET&#91;"fl"&#93;&#41;&#41;&#123;
     switch&#40;$_GET&#91;"fl"&#93;&#41;&#123;
       case "L"&#58; 
                     $en="_ΑΒΓΔΕΈΖΗΉΘΙΊΚΛΜΝΞΟΌΠΡΣΣΤΥΎΦΧΨΩΏABCDEFGHIJKLMNOPQRSTUVWXYZ";
					           $el="_αβγδεέζηήθιίκλμνξοόπρσςτυύφχψωώabcdefghijklmnopqrstuvwxyz";
                     $ret="";
                     for &#40;$i=0; $i<mb_strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=mb_substr&#40;$input,$i,1&#41;;
                         if &#40;mb_strpos&#40;$en,$letter,0&#41;&#41; 
                            $ret=$ret . mb_substr&#40;$el,mb_strpos&#40;$en,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
					           echo  trim&#40;$ret&#41;;
                        				 
                     break;
       case "U"&#58;        
                    
					           $el="_αβγδεέζηήθιίκλμνξοόπρσςτυύφχψωώabcdefghijklmnopqrstuvwxyz";
                     $en="_ΑΒΓΔΕΈΖΗΉΘΙΊΚΛΜΝΞΟΌΠΡΣΣΤΥΎΦΧΨΩΏABCDEFGHIJKLMNOPQRSTUVWXYZ";
                     $ret="";
                     for &#40;$i=0; $i<mb_strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=mb_substr&#40;$input,$i,1&#41;;
                         if &#40;mb_strpos&#40;$el,$letter,0&#41;&#41; 
                            $ret=$ret . mb_substr&#40;$en,mb_strpos&#40;$el,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
					           echo  trim&#40;$ret&#41;;
                        				 
                     break;
       case "EN"&#58;   
					           $el="_αβγδεζηήθιίκλμνξοόπρσςτυύφχψωώΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ";
                     $en="_abgdezhhuiiklmnjooprsstyyfxcvvABGDEZHUIKLMNJOPRSTYFXCV";
                     $ret="";
                     for &#40;$i=0; $i<mb_strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=mb_substr&#40;$input,$i,1&#41;;
                         if &#40;mb_strpos&#40;$el,$letter,0&#41;&#41; 
                            $ret=$ret . mb_substr&#40;$en,mb_strpos&#40;$el,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
					       echo  trim&#40;$ret&#41;;
                        				 
                 break;
       case "EL"&#58;    
                     $en="_abgdezhuiklmnjoprstyfxcvwABGDEZHUIKLMNJOPRSTYFXCVW";
					           $el="_αβγδεζηθικλμνξοπρστυφχψωςΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩς";
                     $ret="";
                     for &#40;$i=0; $i<mb_strlen&#40;$input&#41;; $i++&#41; &#123;
                         $letter=mb_substr&#40;$input,$i,1&#41;;
                         if &#40;mb_strpos&#40;$en,$letter,0&#41;&#41; 
                            $ret=$ret . mb_substr&#40;$el,mb_strpos&#40;$en,$letter,0&#41;,1&#41;;
                         else
                            $ret=$ret . $letter;
                      &#125;
					           echo  trim&#40;$ret&#41;;
                        				 
                    break;
	  default&#58;
         echo "!error";		
     &#125;
  &#125;
 
?>
Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!

alexsoft

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από alexsoft » 08 Ιαν 2010 19:38

Τώρα είδα ότι χρησημοποίησες τις multibyte εντολές.....

αρκούν αρκεί να υποστηρίζονται από τον server...... κάνε πρώτα έναν έλεγχο στο php.ini και δες εάν έχεις ενεργοποιήσει το extension=php_mbstring.dll αλλιώς δεν πρόκειται να στο καταλάβει.....

πρόσθεσε στην αρχή και το

Κώδικας: Επιλογή όλων

if &#40; extension_loaded&#40;'mbstring'&#41;&#41; &#123;
    if &#40; ini_get&#40;'mbstring.func_overload'&#41; & MB_OVERLOAD_STRING &#41; &#123;
        trigger_error&#40;'String functions are overloaded by mbstring',E_USER_ERROR&#41;;
    &#125;
    mb_internal_encoding&#40;'UTF-8'&#41;;
&#125;


Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από dva_dev » 08 Ιαν 2010 22:27

Αυτό το πράγμα σίγουρα το καταλαβαίνει;
<?header("Content-Type: text/html; charset=utf-8"); ?>
μήπως να γινόταν ένα απλό

Κώδικας: Επιλογή όλων

<?php header&#40;"Content-Type&#58; text/html; charset=utf-8"&#41;; ?>

Άβαταρ μέλους
thoidis
Δημοσιεύσεις: 14
Εγγραφή: 19 Ιαν 2006 22:01
Τοποθεσία: ΔΡΑΜΑ

Μετατροπές σε ΚΕΦΑΛΑΙΑ, μικρά, Ελληνικά, Αγγλικά AJAX, PHP

Δημοσίευση από thoidis » 12 Ιαν 2010 09:56

dva_dev έγραψε:Αυτό το πράγμα σίγουρα το καταλαβαίνει;
<?header("Content-Type: text/html; charset=utf-8"); ?>
μήπως να γινόταν ένα απλό

Κώδικας: Επιλογή όλων

<?php header&#40;"Content-Type&#58; text/html; charset=utf-8"&#41;; ?>
Εννοείται... η λέξη php είναι προαιρετική...
Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!


Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης