News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

Περισοτεροι χαρακτηρες στον τιτλο

Started by d-gr, May 14, 2012, 07:45:23 AM

Previous topic - Next topic

d-gr

Πως μπορώ να μεγαλώσω λίγο το όριο που είναι τώρα ο τίτλος του ποστ (αν μέτρησα καλά είναι 63) πχ σε 70?. Μερικές φορές ένα θέμα έχει περισσότερους και μου τους κόβει..


d-gr

Ευχαριστώ αλλά δεν θελω να το κάνω με mod εκτός και αν δεν υπάρχει άλλος τρόπος.

vkot

Έχεις ελληνικά σε UTF-8 και σου κόβει τον τίτλο;
Αυτό συμβαίνει σε μένα, από τότε που έκανα μετατροπή σε UTF-8 και δεν έχω λύσει ακόμα το πρόβλημα.
For specialized SMF installation/customization, Web Development, Linux Server Administration, click here.
Για εξειδικευμένες υπηρεσίες στα παραπάνω, πατήστε εδώ.

d-gr

Ναι σε utf-8 είναι το forum.Χμ άρα λες ότι δεν υπάρχει λύση ε? Θα το ψάξω με το ποιο πάνω mod τότε μήπως και γίνει τίποτα.

gvhools

Καλησπέρα,
το παραπάνω Mod απ ότι είδα δεν υπάρχει πλέον,
μήπως να ζητούσαμε βοήθεια από τους main Πίνακες του smf;
SMF: 2.0.2
Εμφάνιση: Vertex
Mods:
SimplePortal    2.3.5
Ohara YouTube Embed    1.0
Blue Smiley    1.0
RSS Feed Icon    1.1
Stop Forum Spam    1.0
Ad Managment    3.0.1
---------------------------------
Ελληνική κοινότητα ZorinOs

GoofyX

Αν ο πίνακας είναι σε utf-8, το μήκος του είναι όσοι χαρακτήρες λέει στη δήλωση δημιουργίας του πίνακα (@vkot δεν πρέπει να παίζει ρόλο το utf-8, εκτός αν ο πίνακάς σου έχει άλλο character set, δηλαδή το varchar(5) θα πάρει 5 χαρακτήρες σε οποιαδήποτε γλώσσα και όχι 5 bytes). Μια κομπογιαννίτικη λύση είναι να μεγαλώσεις το μέγεθος της στήλης του πίνακα που κρατάει τον τίτλο και σε περίπτωση που στον κώδικα δεν υπάρχει κάποια δικλείδα ασφαλείας σχετικά με το μέγεθος του τίτλου, τότε λογικά θα σου παίξει.
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

gvhools

ενδιαφέρον GoofyX,
το θέμα είναι αν μπορεί να το δοκιμάσει κάποιος και να μας πει αν λειτουργεί,αλλά από την άλλη σε ένα upgrade μήπως προκύψει κάποιο πρόβλημα;
υποθέτω δεν ξέρω τι μπορεί να παίζει γιατί δεν έχω κάτσει να ψάξω κατά πόσο το upgrade επηρεάζει την βάση δεδομένων.

SMF: 2.0.2
Εμφάνιση: Vertex
Mods:
SimplePortal    2.3.5
Ohara YouTube Embed    1.0
Blue Smiley    1.0
RSS Feed Icon    1.1
Stop Forum Spam    1.0
Ad Managment    3.0.1
---------------------------------
Ελληνική κοινότητα ZorinOs

vkot

Στο φόρουμ μου, αυτό που συμβαίνει είναι το εξής:

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

Σε όλους το ίδιο συμβαίνει;
For specialized SMF installation/customization, Web Development, Linux Server Administration, click here.
Για εξειδικευμένες υπηρεσίες στα παραπάνω, πατήστε εδώ.

geogeo.gr

Το ίδιο πρόβλημα υπάρχει και στους τίτλους εκδηλώσεων στο ημερολόγιο. Εκεί κόβετε ολόκληρος ο τίτλος.
Αυτό συμβαίνει γιατί σε utf-8 οι ελληνικοί χαρακτήρες πιάνουν διπλάσια bytes.

nikan

Οι 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);

GoofyX

Για το λόγο αυτό, στην PHP υπάρχουν οι συναρτήσεις που δουλεύουν σε UTF-8 strings (mbstring).
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...

nikan

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, αλλά και πάλι αυτό δεν ισχύει.

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

Advertisement: