philos Δημοσ. 14 Απριλίου 2017 Δημοσ. 14 Απριλίου 2017 Καλημέρα! Λοιπόν, κάνω κάποια ajax requests σε αρχείο php και τα επιστρεφόμενα δεδομένα θέλω να τα χειριστώ με JavaScript (έστω να τοποθετώ στη σελίδα, στα σχετικά div ids τα αντίστοιχα δεδομένα).Απλά δεν πρόκειται για επιστροφή μιας τιμής (η οποία θα πήγαινε σε ένα έκαστο div id), αλλά πίνακα με πολλές τιμές. Ας πούμε ότι κάνω στο php αρχείο: $output = array(); $output['test1'] = 'lalalala'; $output['test2'] = 1234; $output['test3'] = "{HTML Κώδικας με χαρακτήρες, ελληνικούς και μη και σύμβολα}"; exit(json_encode($output)); Στο παραπάνω παράδειγμα η json_encode επιστρέφει false. Με λίγη αναζήτηση στο διαδίκτυο και δοκιμές, διαπίστωσα ότι μάλλον φταίνε οι ελληνικοί χαρακτήρες στο πχ $output['test3']. Κάτι δηλαδή με το γεγονός ότι δεν είναι utf-8 οι χαρακτήρες. Είχα βρει πριν αρκετές ώρες μια custom συνάρτηση php που μετέτρεπε σε utf-8 τους χαρακτήρες, προτού περάσω τη συμβολοσειρά στην $output['test3'], αλλά υπήρχε πρόβλημα με τους ελληνικούς χαρακτήρες, όπως φαίνονταν/ επιστρέφονταν στο site. Το site είναι σε ISO-8859-7. Υπάρχει κάποιος τρόπος να ξανά μετατρέψω το ajax response σε ISO-8859-7? ή κάποια άλλη λύση; ΥΓ: Χρησιμοποιώ το $.ajax {} της jQuery.
defacer Δημοσ. 14 Απριλίου 2017 Δημοσ. 14 Απριλίου 2017 Κακώς είναι σε ISO το site, αυτό μόνο προβλήματα θα δημιουργήσει (όπως δημιουργεί ήδη). Το μόνο πράγμα που μπορείς να κάνεις είναι encode πρώτα σε utf8 για να περάσουν από json encode και μετά decode στη js με custom κώδικα ή κάποιο library. 1
philos Δημοσ. 20 Απριλίου 2017 Μέλος Δημοσ. 20 Απριλίου 2017 Ναι, θα κάνω έρευνα κάποια στιγμή να το μετατρέψω σε UTF-8. Λοιπόν το θέμα διορθώθηκε για την τωρινή κατάσταση με ένα: $output = iconv(mb_detect_encoding($output, mb_detect_order(), true), "UTF-8", $output); Άλλη μια ερώτηση σχετικά με την PHP ειδικότερα: Έχω πάρει την "ιδέα" από άλλο addon της vBulletin που είναι η εξής: - έχουμε μια σελίδα που έχει περιεχόμενο το οποίο ανανεώνεται με ajax, αυτόματα (JavaScript --> setInterval()) - προκειμένου να μην γίνεται συνεχώς request σε αρχείο PHP που φορτώνει όλο το background της vBulletin ώστε να γίνει έλεγχος για νέο περιεχόμενο, γίνεται request σε ένα αρχείο PHP (aop.php) που έχει ως μοναδικό περιεχόμενο μια Unix Timestamp - το αρχείο αυτό (δηλαδή η Unix Timestamp) ανανεώνεται με την time() (τωρινή timestamp), κάθε φορά που ποστάρεται νέο περιεχόμενο (πχ κάποιο μήνυμα) στο site - έτσι, αν κατά ένα ajax GET χτύπημα στο aop.php, το return data (η timestamp) είναι > από αυτή που είχε κρατήσει η JavaScript κατά την τελευταία φορά που έκανε ajax GET, τότε καλείται η function που θα τραβήξει το νέο περιεχόμενο προς αρχείο PHP της vBulletin. Θα ήθελα να ρωτήσω λοιπόν το εξής: έχει διαφορά αν το αρχείο στον server που κρατάει την τελευταία timestamp περιεχομένου (aop.php) όπου το χτυπάει η setInterval κάθε Χ δευτερόλεπτα, είναι PHP ή αν θα ήταν txt, όσον αφορά την αποδοτικότητα; Δηλαδή, μήπως όταν γίνεται request σε PHP αρχείο, ο server φορτώνει περισσότερα στη μνήμη σε σχέση με το να γινόταν request σε *txt; Πάντως το aop.php δεν έχει <? ... ?>. Έχει απλά την timestamp σαν απλό κείμενο. Τέλος να πω ότι το aop.php έχει σχετικό CHMOD ώστε να μπορεί να το ανανεώνει η PHP κατά το ποστάρισμα νέου περιεχομένου (δεν ξέρω αν έχει καμία σημασία και διαφορά με το θέμα να ήταν *txt, απλά το αναφέρω). Αυτά
mad-proffessor Δημοσ. 20 Απριλίου 2017 Δημοσ. 20 Απριλίου 2017 Έχει σχέση με το πως χρησιμοποιείς τη php. Αν τη δουλεύεις με το apache mod_php τότε είναι embedded στο web server και κάθε request που εξυπηρετει με response αυτός, έχει αντίκτυπο στους πόρους(μνήμη,cpu). Για το λόγο οτι κάθε apache thread που χρησιμοποιείται για να εξυπηρετήσει το request έχει embedded και τo php interpreter. Για το αρχείο συγκεκριμενα (και ανεξάρτητα πως δουλευεις τη php) εφόσον το επεξεργάζεται php script ο interpreter ήδη δουλευει μια φορα για να το επεξεργαστεί, αλλά το response ο web server μπορει να συμβουλευτει τη mime type list του και να το στείλει κατευθειαν στο client χωρίς μεσολάβηση κάποιου php thread(εφόσον δε τρέχεις τη php σαν apache module αλλα σα fcgi). Άρα αξίζει να το έχεις σα plain text. 1
philos Δημοσ. 20 Απριλίου 2017 Μέλος Δημοσ. 20 Απριλίου 2017 Ωραία, οπότε θα κάνω request στο aop.txt. Thanks για την απάντηση proffessor!
philos Δημοσ. 27 Απριλίου 2017 Μέλος Δημοσ. 27 Απριλίου 2017 (επεξεργασμένο) Μια ερώτηση σχετικά με κωδικοποίηση:- λοιπόν, μέσω PHP τραβάω τον τίτλο ενός youtube video, με τον εξής τρόπο (στο net τον βρήκα) : $page = file_get_contents($geturl); $doc = new DOMDocument(); $doc->loadHTML($page); $title_div = $doc->getElementById('eow-title'); $video_title = $title_div->nodeValue; $video_title = trim($video_title); (όπου $geturl το url του youtube video) Το θέμα: υπάρχει κάποιο πρόβλημα αν ο τίτλος είναι με μη αγγλικούς χαρακτήρες (πχ Ελληνικά ή Ρώσικα).Εγώ παίρνω απλά τον $video_title και τον αποθηκεύω σε MySQL βάση δεδομένων με escape_string. Για παράδειγμα, με αυτό το βίντεο: https://www.youtube.com/watch?v=4GTMwsqNlg0 ... το αποτέλεσμα είναι: Καμιά ιδέα ώστε να διορθώσω/ επιστρέψω σωστά τους ήδη αποθηκευμένους τίτλους; ή πάει, αποθηκεύτηκαν λάθος; ή αν δε γίνεται αυτό, κάποια λύση για να αποθηκεύω από 'δω και στο εξής σωστά τους τίτλους; Έκανα διάφορες προσπάθειες με php iconv αφού τράβαγα τους τίτλους από τη MySQL, αλλά χωρίς αποτελέσμα (πχ ενίωτε το αποτέλεσμα ήταν ερωτηματικά ???? κτλ). edit: ok παιδιά το κατάφερα με ένα: mb_convert_encoding($link['link_title'], "cp1252", "utf-8")! Επεξ/σία 28 Απριλίου 2017 από philos
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα