• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

קידוד URL לעברית באמצעות VBA

מתוזמן נעוץ נעול הועבר ארכיון code613m
9 פוסטים 4 כותבים 535 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #1

    חיפשתי ולא מצאתי את הקידוד שנעשה בURL עבור עברית (כל מה שיש נותן תוצאות לא טובות בכלל, כנראה בנוי על שפות אחרות), ועל כן החלטתי לכתוב לבד קוד, שאיננו מבוסס על אלגוריתם, אלא על מידע סטטי בלבד

    הנה הקוד, אם יש למישהו הערות אשמח לשמוע, נראה לי שלא כיסיתי את כל התווים, כמו"כ אם מישהו מכיר את האלגוריתם אולי כדאי להכיר אותו.
    קרדיט לאתר שדרכו ידעתי את החומר

    אולם לצערי הרב יש שם באג מוזר שהוא איננו מזהה אותיות סופיות בעברית, כלומר הוא מחזיר לאות "מ" ולאות "ם" את אותו ערך.

    אני יודע שככה SQL מתנהג אבל VB???? מי נתן לו רשות להבין בשבילי את האותיות העבריות???

    האם יש למישהו הסבר לזה????

    הנה הקוד

    Function EncodeOneCharToURL(char As String)
    Dim Encode As String
    Select Case char
    Case "א"
     Encode = "%D7%90"
    Case "ב"
     Encode = "%D7%91"
    Case "ג"
     Encode = "%D7%92"
    Case "ד"
     Encode = "%D7%93"
    Case "ה"
     Encode = "%D7%94"
    Case "ו"
     Encode = "%D7%95"
    Case "ז"
     Encode = "%D7%96"
    Case "ח"
     Encode = "%D7%97"
    Case "ט"
     Encode = "%D7%98"
    Case "י"
     Encode = "%D7%99"
    Case "כ"
     Encode = "%D7%9B"
    Case "ך"
     Encode = "%D7%9A"
    Case "ל"
     Encode = "%D7%9C"
    Case "מ"
     Encode = "%D7%9E"
    Case "ם"
     Encode = "%D7%9D"
    Case "נ"
     Encode = "%D7%A0"
    Case "ן"
     Encode = "%D7%9F"
    Case "ס"
     Encode = "%D7%A1"
    Case "ע"
     Encode = "%D7%A2"
    Case "פ"
     Encode = "%D7%A4"
    Case "ף"
     Encode = "%D7%A3"
    Case "צ"
     Encode = "%D7%A6"
    Case "ץ"
     Encode = "%D7%A5"
    Case "ק"
     Encode = "%D7%A7"
    Case "ר"
     Encode = "%D7%A8"
    Case "ש"
     Encode = "%D7%A9"
    Case "ת"
     Encode = "%D7%AA"
    Case " "
    Encode = "+"
    Case """"
    Encode = "%22"
    Case "'"
    Encode = "%27"
    Case Else
    Encode = char
    
    End Select
    
    EncodeOneCharToURL = Encode
    End Function
    
    Public Function URLEncode(ByVal StringToEncode As String) As String
    Dim currentCar As String, Result As String
    For i = 1 To Len(StringToEncode)
    currentCar = Mid(StringToEncode, i, 1)
    Result = Result & EncodeOneCharToURL(currentCar)
    Next
    URLEncode = Result
    
    End Function
    

    פורסם במקור בפורום CODE613 ב29/07/2013 01:46 (+03:00)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

    תגובה 1 תגובה אחרונה
    0
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים
    כתב ב נערך לאחרונה על ידי
    #2

    כדי שלא יחליף לך בין אותיות אמצעיות לסופיות נסה לכתוב במקום

    CASE "ם"
     (CASE CHR(141
    

    או שתעשה כך

    Function EncodeOneCharToURL(char As Byte)
    Dim Encode As String
    Select Case char
    Case 128
     Encode = "%D7%90"
    Case 129
     Encode = "%D7%91"
     
     '.....
    End Function
    

    וההסבר הוא שיש Binary Compare ויש Text Compare
    מה שאתה עשית כנראה שVBA מפרש כמו השוואה של טקסט ובטקסט מ' ום' שוות אבל מבחינה בינארית יש חילוק בינהם ולהם הצעתי שהבדיקה תהיה בינארית.

    פורסם במקור בפורום CODE613 ב29/07/2013 08:31 (+03:00)

    מומלצים: חיפוש במסמכים | OCR | נקדן חינמי | ניהול כולל - מס"ב

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #3

    אם יש לך עוד בעיות,
    השתמש אולי בקוד זה (אצלי עובד מצויין):

    Private Const CP_UTF8 = 65001
    Private Declare PtrSafe Function WideCharToMultiByte Lib "Kernel32" (ByVal CodePage As Long, ByVal dwflags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
    Public Function UTF16To8(ByVal UTF16 As String) As String
    Dim sBuffer As String
    Dim lLength As Long
    If UTF16 <> "" Then
        lLength = WideCharToMultiByte(CP_UTF8, 0, CLng(StrPtr(UTF16)), -1, 0, 0, 0, 0)
        sBuffer = Space$(lLength)
        lLength = WideCharToMultiByte(CP_UTF8, 0, CLng(StrPtr(UTF16)), -1, CLng(StrPtr(sBuffer)), Len(sBuffer), 0, 0)
        sBuffer = StrConv(sBuffer, vbUnicode)
        UTF16To8 = Left$(sBuffer, lLength - 1)
    Else
        UTF16To8 = ""
    End If
    End Function
    
    Public Function URLEncode( _
       StringVal As String, _
       Optional SpaceAsPlus As Boolean = False, _
       Optional UTF8Encode As Boolean = True _
    ) As String
    
    Dim StringValCopy As String: StringValCopy = IIf(UTF8Encode, UTF16To8(StringVal), StringVal)
    Dim StringLen As Long: StringLen = Len(StringValCopy)
    
    If StringLen > 0 Then
        ReDim result(StringLen) As String
        Dim I As Long, CharCode As Integer
        Dim Char As String, Space As String
    
      If SpaceAsPlus Then Space = "+" Else Space = "%20"
    
      For I = 1 To StringLen
        Char = Mid$(StringValCopy, I, 1)
        CharCode = Asc(Char)
        Select Case CharCode
          Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
            result(I) = Char
          Case 32
            result(I) = Space
          Case 0 To 15
            result(I) = "%0" & Hex(CharCode)
          Case Else
            result(I) = "%" & Hex(CharCode)
        End Select
      Next I
      URLEncode = Join(result, "")
    
    End If
    End Function
    

    לקוח מפה http://stackoverflow.com/questions/218181/how-can-i-url-encode-a-string-in-excel-vba
    עם התאמות קלות ל64 ביט.

    פורסם במקור בפורום CODE613 ב31/07/2013 17:59 (+03:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • M מנותק
    M מנותק
    magicode
    כתב ב נערך לאחרונה על ידי
    #4

    בגדול צריך להמיר קודם לutf8 ואחריזה לעשות את זה בפורמט url %XX

    זה ממש פשוט לעשות את זה עם נעזרים בויקיפדיה http://he.wikipedia.org/wiki/UTF-8

    עשיתי את זה בjs פשוט .

    // המרת עברית ל utf-8 ואחרי זה ל url
    
    // מקור  http://he.wikipedia.org/wiki/UTF-8
    
    // פונקציה שממירה מספר לפורמט url %XX
    function toHex(chr){
        chr = chr.toString(16) ;
        return "%" + (chr.length == 1 ? "0" :"" ) + chr; 
    }
    
    var strIn = "אבגד";
    var strOut = ''
    
    for (i = 0 ; i < strIn.length ; i++ )
    {
        // המרת תו למספר יוניקוד   
        var chr = strIn.charCodeAt(i);
        
        if( chr <= 0x7F )
            strOut += toHex(chr);
        else if( chr <= 0x7FF )
        {
            strOut += toHex((( chr >> 6) & 0x1f ) | 0xc0 )  ;
            strOut += toHex((  chr & 0x3f ) | 0x80 )  ;
        }
    }
    
    $("#r").text(strOut);
    

    אפשר לראות דוגמא חיה פה http://jsfiddle.net/yrRdG/

    בשביל לכתוב את זה ב vba אתה משתמש בפונקציה chrW כדי לקבל את הקוד יוניקוד של התו.

    פורסם במקור בפורום CODE613 ב31/07/2013 22:14 (+03:00)

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #5

    אם לא היה מדובר בVBA, זה שורת קוד אחת בC#.

    פורסם במקור בפורום CODE613 ב01/08/2013 13:35 (+03:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים
    כתב ב נערך לאחרונה על ידי
    #6

    איך ?

    פורסם במקור בפורום CODE613 ב01/08/2013 19:51 (+03:00)

    מומלצים: חיפוש במסמכים | OCR | נקדן חינמי | ניהול כולל - מס"ב

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #7

    @רחמים

    איך ?

    אחרי הוספת רפרנס לSystem.Web' קוד לC# וVB.NET כאחד:

    System.Web.HttpUtility.UrlEncode("שלום abc")
    

    פורסם במקור בפורום CODE613 ב02/08/2013 16:00 (+03:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • M מנותק
    M מנותק
    magicode
    כתב ב נערך לאחרונה על ידי
    #8

    @דוד ל.ט.

    אם לא היה מדובר בVBA, זה שורת קוד אחת בC#.

    זה לא נקרא שורה אחת ב c#.
    זה לא קשור לשפת c# שזה נהפך לשורה אחת.
    גם בjs זה שורה אחת בגלל שיש פונקציה כזאת שעושה את זה. וגם בphp וגם בpython וגם בvba זה יהיה שורה אחת אחרי שתעשה פונקציה כזאת.

    אני הבאתי את האלגוריתם שעושה את זה בלי פונקציה הבאתי את זה בjs בגלל שאני על לינוקס ואני לא יכול לכתוב בvba והשפה שהכי קל לכתוב בה אוןלין זה js.

    פורסם במקור בפורום CODE613 ב03/08/2013 23:59 (+03:00)

    תגובה 1 תגובה אחרונה
    0
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #9

    @magicode

    @דוד ל.ט.
    אם לא היה מדובר בVBA, זה שורת קוד אחת בC#.

    אני הבאתי את האלגוריתם שעושה את זה בלי פונקציה הבאתי את זה בjs בגלל שאני על לינוקס ואני לא יכול לכתוב בvba והשפה שהכי קל לכתוב בה אוןלין זה js.

    אשריך רבי אלגוריתם.........

    פורסם במקור בפורום CODE613 ב04/08/2013 16:10 (+03:00)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

    תגובה 1 תגובה אחרונה
    0

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.