Simple Machines Community Forum

SMF Support => Language Specific Support => Ελληνικά (Greek) => Topic started by: d-gr on May 14, 2012, 07:45:23 AM

Title: Περισοτεροι χαρακτηρες στον τιτλο
Post by: d-gr on May 14, 2012, 07:45:23 AM
Πως μπορώ να μεγαλώσω λίγο το όριο που είναι τώρα ο τίτλος του ποστ (αν μέτρησα καλά είναι 63) πχ σε 70?. Μερικές φορές ένα θέμα έχει περισσότερους και μου τους κόβει..
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: villasg on May 20, 2012, 11:46:47 AM
Για δες μια αυτο το mod

Set Large Of Titles And Texts (http://custom.simplemachines.org/mods/index.php?mod=2822)
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: d-gr on May 22, 2012, 05:36:22 AM
Ευχαριστώ αλλά δεν θελω να το κάνω με mod εκτός και αν δεν υπάρχει άλλος τρόπος.
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: vkot on May 22, 2012, 02:14:16 PM
Έχεις ελληνικά σε UTF-8 και σου κόβει τον τίτλο;
Αυτό συμβαίνει σε μένα, από τότε που έκανα μετατροπή σε UTF-8 και δεν έχω λύσει ακόμα το πρόβλημα.
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: d-gr on May 22, 2012, 02:29:01 PM
Ναι σε utf-8 είναι το forum.Χμ άρα λες ότι δεν υπάρχει λύση ε? Θα το ψάξω με το ποιο πάνω mod τότε μήπως και γίνει τίποτα.
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: gvhools on January 08, 2014, 04:37:50 PM
Καλησπέρα,
το παραπάνω Mod απ ότι είδα δεν υπάρχει πλέον,
μήπως να ζητούσαμε βοήθεια από τους main Πίνακες του smf;
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: GoofyX on January 08, 2014, 05:04:30 PM
Αν ο πίνακας είναι σε utf-8, το μήκος του είναι όσοι χαρακτήρες λέει στη δήλωση δημιουργίας του πίνακα (@vkot δεν πρέπει να παίζει ρόλο το utf-8, εκτός αν ο πίνακάς σου έχει άλλο character set, δηλαδή το varchar(5) θα πάρει 5 χαρακτήρες σε οποιαδήποτε γλώσσα και όχι 5 bytes). Μια κομπογιαννίτικη λύση είναι να μεγαλώσεις το μέγεθος της στήλης του πίνακα που κρατάει τον τίτλο και σε περίπτωση που στον κώδικα δεν υπάρχει κάποια δικλείδα ασφαλείας σχετικά με το μέγεθος του τίτλου, τότε λογικά θα σου παίξει.
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: gvhools on January 08, 2014, 05:21:30 PM
ενδιαφέρον GoofyX,
το θέμα είναι αν μπορεί να το δοκιμάσει κάποιος και να μας πει αν λειτουργεί,αλλά από την άλλη σε ένα upgrade μήπως προκύψει κάποιο πρόβλημα;
υποθέτω δεν ξέρω τι μπορεί να παίζει γιατί δεν έχω κάτσει να ψάξω κατά πόσο το upgrade επηρεάζει την βάση δεδομένων.

Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: vkot on January 10, 2014, 04:10:19 AM
Στο φόρουμ μου, αυτό που συμβαίνει είναι το εξής:

- Η βάση και οι πίνακες είναι σε utf8_general_ci.
- To πεδίο subject είναι varchar(255), δεν το έχω πειράξει.
- Το πεδίο Τίτλος, στην φόρμα αποστολής μηνύματος, είναι maxlength="80", δεν το έχω πειράξει.
- Γεμίζω το πεδίο Τίτλος με όσους χαρακτήρες επιτρέπει, δηλ: "αβγδεζηθικλμνξοπρστυφχψω αβγδεζηθικλμνξοπρστυφχψω αβγδεζηθικλμνξοπρστυφχψω αβγδε", και μετά την αποστολή του μηνύματος, ο Τίτλος έχει καταχωρηθεί ως "αβγδεζηθικλμνξοπρστυφχψω αβγδεζηθικλμνξοπρστυφχψω α", δηλ. 51 χαρακτήρες.
- Όταν γεμίζω τον Τίτλο με μη-ελληνικούς χαρακτήρες, πχ. "1234567890123... " τότε καταγράφονται όλοι οι 80 χαρακτήρες.

Σε όλους το ίδιο συμβαίνει;
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: geogeo.gr on May 05, 2014, 12:23:17 PM
Το ίδιο πρόβλημα υπάρχει και στους τίτλους εκδηλώσεων στο ημερολόγιο. Εκεί κόβετε ολόκληρος ο τίτλος.
Αυτό συμβαίνει γιατί σε utf-8 οι ελληνικοί χαρακτήρες πιάνουν διπλάσια bytes.
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: nikan on May 15, 2014, 11:35:53 AM
Οι UTF-8 χαρακτήρες σε 'utf8_general_ci' βάση δεδομένων μετρούνται σαν χαρακτήρες και όχι σαν bytes, οπότε αν έχουμε varchar(255) επιτρέπονται 255 χαρακτήρες.
Αυτό όμως δεν συμβαίνει και στην PHP. Αν υπάρχει στον κώδικα δικλίδα ασφαλείας που ελέγχει τον αριθμό χαρακτήρων, θα τους μετρήσει σε bytes και θα κόψει τον τίτλο.

Παράδειγμα για τον τίτλο μηνύματος που κόβει τον τίτλο στους 100 ANSI χαρακτήρες.
Στο αρχείο Post.php
// Make sure the subject isn't too long - taking into account special characters.
if ($smcFunc['strlen']($form_subject) > 100)
$form_subject = $smcFunc['substr']($form_subject, 0, 100);

// At this point, we want to make sure the subject isn't too long.
if ($smcFunc['strlen']($_POST['subject']) > 100)
$_POST['subject'] = $smcFunc['substr']($_POST['subject'], 0, 100);

// Maximum number of characters.
if ($smcFunc['strlen']($_POST['subject']) > 100)
$_POST['subject'] = $smcFunc['substr']($_POST['subject'], 0, 100);


Και στο αρχείο SplitTopics.php
// Check the subject length.
if ($smcFunc['strlen']($new_subject) > 100)
$new_subject = $smcFunc['substr']($new_subject, 0, 100);

// Keep checking the length.
if ($smcFunc['strlen']($target_subject) > 100)
$target_subject = $smcFunc['substr']($target_subject, 0, 100);
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: GoofyX on May 15, 2014, 01:10:56 PM
Για το λόγο αυτό, στην PHP υπάρχουν οι συναρτήσεις που δουλεύουν σε UTF-8 strings (mbstring).
Title: Re: Περισοτεροι χαρακτηρες στον τιτλο
Post by: nikan on May 22, 2014, 08:32:51 AM
Quote from: GoofyX on May 15, 2014, 01:10:56 PM
Για το λόγο αυτό, στην PHP υπάρχουν οι συναρτήσεις που δουλεύουν σε UTF-8 strings (mbstring).

Η χρήση των εντολών mb_strlen και mb_substr είναι για απλές συναρτήσεις και δεν έχουν εγγυημένο αποτέλεσμα.
Γι' αυτό στο SMF έχουν αντικαταστήσει κάποιες PHP εντολές όπως και τις strlen και substr, με δικές του όπως $smcFunc['strlen'] και $smcFunc['substr'], οι οποίες θεωρητικά λειτουργούν το ίδιο σε ANSI και σε UTF-8, αλλά και πάλι αυτό δεν ισχύει.

Η ασφαλέστερη λύση στο πρόβλημα του θέματος είναι να αυξήσουμε τον αριθμό κοπής χαρακτήρων.