הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 28-05-09, 11:37   # 1
Matan Levy
חבר מתקדם
 
Matan Levy's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 711

Matan Levy לא מחובר  

בעיית עברית עם preg_match

אהלן,
בניתי פונקציה שבודקת האם מחרוזת שמתקבלת נמצאת בטווח ערכים שמתקבל:

PHP קוד:
function checkChars($str,$a,$b)
{
   
$ab='/^[^]{'.$a.','.$b.'}$/';
   if (!
preg_match($ab,$str)) return 0;
   return 
1;

הפונקציה מחזירה 1 אם מספר התווים של str נמצא בין a ל b (כולל),
אחרת - מחזירה 0.

עם אנגלית מספרים ותווים זה עובד בלי בעיה.
חקרתי את העניין קצת לעומק וגיליתי שתווים עבריים (א-ת) הוא סופר פעמיים.

א - 2 תווים.
אבג - 6 תווים.
אבגדהוזחטיכלמנצעפצקרשת - 44 תווים.

הקידוד הוא utf-8.
מה אוכל לעשות?

תודה!
  Reply With Quote
ישן 28-05-09, 14:08   # 2
Davieh
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Apr 2008
מיקום: אשדוד
הודעות: 151

Davieh לא מחובר  

גם לי היית אותה הבעיה, רק במקרה אחר, לא הצלחתי לעשות בדיקה על תווים בעברית עם preg_match
במקרה שלי זה היה בדיקה של שם משתמש\ סיסמא אז השתמשתי ב HTMLSPECIALCHARS וכדומה ..

אני יחזור לשאלה שלך, אני לא יודע את הפיתרון, ומצטרף אליך גם.
__________________
דוד ס.
פיתוח, בניית אתרים ומערכות ניהול מתקדמות.
0547471710 - david4156@gmail.com
  Reply With Quote
ישן 28-05-09, 14:21   # 3
Daniel
אחראי פורום
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 2,875

Daniel לא מחובר  

יש המון פונקציות שהם utf8-safe שאנשים יצרו.
אגב - כדי לבדוק אורך לא עושים את זה, אלא isset($str[...])
  Reply With Quote
ישן 28-05-09, 14:55   # 4
Matan Levy
חבר מתקדם
 
Matan Levy's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 711

Matan Levy לא מחובר  

ציטוט:
נכתב במקור על ידי MasterT צפה בהודעה
יש המון פונקציות שהם utf8-safe שאנשים יצרו.
אגב - כדי לבדוק אורך לא עושים את זה, אלא isset($str[...])
לא הבנתי.
  Reply With Quote
ישן 28-05-09, 15:00   # 5
vadimg88
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Feb 2008
גיל: 37
הודעות: 710

vadimg88 לא מחובר  

כשאתה משתמש ב UTF וכותב בעברית מספר התווים גדול יותר.
  Reply With Quote
ישן 28-05-09, 16:09   # 6
Matan Levy
חבר מתקדם
 
Matan Levy's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 711

Matan Levy לא מחובר  

ציטוט:
נכתב במקור על ידי vadimg88 צפה בהודעה
כשאתה משתמש ב UTF וכותב בעברית מספר התווים גדול יותר.
זה אומר שכדאי להשתמש בקידוד אחר(עברית)?
  Reply With Quote
ישן 28-05-09, 16:12   # 7
Shay Ben Moshe
משתמש - היכל התהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2007
הודעות: 1,397

Shay Ben Moshe לא מחובר  

למה שלא תשתמש בstrlen פשוט?
http://il.php.net/manual/en/function.strlen.php
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
  Reply With Quote
ישן 28-05-09, 16:58   # 8
vadimg88
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Feb 2008
גיל: 37
הודעות: 710

vadimg88 לא מחובר  

@מתן - לא. זה אומר שצריך למצוא דרך לעשות את מה שהוא רוצה שיתמוך ב UTF8.

ציטוט:
למה שלא תשתמש בstrlen פשוט?
http://il.php.net/manual/en/function.strlen.php
כי זה סופר את כמות התווים בערך, לא אומר אם הוא נמצא בין לבין.
  Reply With Quote
ישן 28-05-09, 18:51   # 9
Matan Levy
חבר מתקדם
 
Matan Levy's Avatar
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 711

Matan Levy לא מחובר  

STRLEN היא אינה תומכת בספירת 500 תווים.
באיזה דרך אני יכול לסדר את הבעיה עם הפונקציה?
  Reply With Quote
ישן 28-05-09, 19:08   # 10
vadimg88
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Feb 2008
גיל: 37
הודעות: 710

vadimg88 לא מחובר  

הנה זה יתמוך ב multibyte וגם הורדתי את ה preg_match והחלפתי בפקודת IF פשוטה.

PHP קוד:
<?php

/**
 * Count number of chars in a string 
 * Supports multi byte chars
 *
 * @param string $string
 */
function countChars$string$encoding='UTF-8' )
{
    return 
mb_strlen($string$encoding);
}

/**
 * Check if the given int is between two values
 *
 * @param int $value
 * @param int $firstElement
 * @param int $secondElement
 * @return bool
 */
function valueInBetween$value$firstElement$secondElement )
{
    return ( (int) 
$value $firstElement && (int) $value $secondElement ) ? TRUE FALSE;
}

# Count english
$string "asfcas";
echo 
countChars($string);

# Count hebrew multi byte
$string "דגעגכדעיגד";
echo 
countChars($string);

# Check if it's bettwen two values, English
$string "asfcas";
var_dump(valueInBetween(countChars($string), 4111)); // true

# Check if it's bettwen two values, Hebrew
$string "שגדעגיעק";
var_dump(valueInBetween(countChars($string), 4111)); // true

$string "שגדעגיעק";
var_dump(valueInBetween(countChars($string), 12111)); // false
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 01:49.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ