Hello

In my asp page I successfully extracted records from my database. The records are written in Hebrew.
I used <% @ codepage=65001 %> and <% Response.Charset= "utf-8" and the display worked ok inside HTML.
Inside my asp code i joined all the values to one string using "x = join(myArry,"|") ". I printed the results and it was ok so far. the problem begin in the JavaScript block. in which i used the “split” command like this
arr=new Array();
var subbs="<% = x%>"
arr = subbs.split("|");

but from some reason when Im printing the array i got nothing as a result
for(i=0; i<arr.length; i++)

document.write("element " + i + " : " + arr + "<BR />");

When I was doing the same without the Hebrew records from DB, but with simple array that contains just numbers, it works fine (x = "1,2,33,4,5" )
So I assume my problem happened because of the Hebrew and i don't know how to fix it...can someone please advice?

Thank you

Recommended Answers

All 7 Replies

sara10,

It does indeed seem that Hebrew characters are the problem. Javscript is really defined as a "Latin-1" langage. Urlencode() won't help because javascript's unescape() will always convert to Latin-1 (unless things have moved on since my reference book was printed).

What I suggest is that you try serving your string segments into separate <span></span> tags each with its own ID.

With a bit of imagination you may be able to shuffle these spans around with dom methods without ever needing to handle the strings themselves in javascript.

Of course, the success of this depends entirely on what you want do client-side with the text.

If you need to perform string manipulations then it seems you will inevitably(?) end up needing to handle the strings in javascript so back to the same old problem. Same with Ajax techniques because server responses would need to be handled by javascript.

Thinking out loud, maybe there are two ways to meet a string manipulation requirement:

  • Do it server-side then re-serve the page (if the Hebrew posts/gets reliably?)
  • Work with character images rather than text.

On that last point, I recently learned of a technique here on Daniweb which may be relevant here (I can't recall the details but should be able to rediscover the topic).

I'm sure you're not the first "non-Latin" to ask this question. Try Googling a query to see what others have done before.

Just a bunch of thoughts I'm afriad.

Airshow

Thank you . I eventually put the “<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ” inside the header and saw that javascript deals good with hebrew.
Inside my asp code I initialized the variable Dim x= "שלום|אבא|אמא|ילד|בית" with Hebrew strings separated by “|” and the split func in javascript works ok and display the Hebrew string :)

Now I see that my problem begins when my asp array is created by records selected from my DB, instead of initializing the "x" string with predefined strings as described above
I extracted the records successfully and use the func "join" to convert the asp array to string so I can later use it in the "split " func in javascript as before - that is no longer works ok and I wonder why.
I suppose that it is related to the fact I’m getting the data from DB, cause when I’m originally initializing asp variable “x” with the predefined data as appear exactly in the DB it works ok (without all the BD procedure )
Does anyone have an idea how to solve it? The code described below
I hope I was clear in describing my problem…

<META HTTP-EQUIV="Content-Type" CONTENT="text/html"; charset="windows-1255">

<html>
<HEAD DIR=RTL> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>
<BODY DIR=RTL>
<% @ codepage=65001 %>
<% Response.Charset= "utf-8"
 
Dim adoCon         'Holds the Database Connection Object
Dim rsGuestbook    'Holds the recordset for the records in the database
Dim strSQL         'Holds the SQL query to query the database 
Dim x  
‘Dim x1 = "שלום|אבא|אמא|ילד|בית"


'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")  
   
'Set an active connection to the Connection object using DSN connection
adoCon.Open "DSN=my_db"  
'Create an ADO recordset object
 Set rsGuestbook = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
strSQL = "SELECT guests.Name FROM guests;"
'Open the recordset with the SQL query 
rsGuestbook.Open strSQL, adoCon


Dim myArry(2)
Dim counter=0

Do Until counter=3
   
      myArry(counter) = rsGuestbook.Fields("Name")
     
	counter=counter+1
	rsGuestbook.MoveNext 
loop 

x = join(myArry,"|") 
 ‘Response.Write(x)   successfully print the records in hebrew 

'Reset server objects
rsGuestbook.Close
Set rsGuestbook = Nothing
Set adoCon = Nothing


%>
<script type="text/javascript" charset="windows-1255">
substring=new Array();
 var subs="<% = x%>"
	
    //split the String into an array
    substring = subs.split("|"); 
    for(i=0; i<substring.length; i++){
		    		
	document.write("element " + i + " : " + substring[i] + "<BR />");
			}



</SCRIPT>


</body>
</html>

Thank
Sara

So Javascript handles hard-coded Hebrew served as UTF-8. That's promising.

Now try putting both hard-coded and database-retreived Hebrew directly onto the page. See if there's any difference.

Airshow

The problem with using DB in the asp code, is that it seems not executing the javascript block at all. like a problem in the order of execution which is not happen when i'm using hard coded x (in the hard coded case after the asp execution, the javascript took action) When replacing to BD in the asp code I also put "document.write("hello")" in the javascript code that was never display
Can u please think of a reason for that?

BR
Sara

Try this -

<% @ codepage=65001 %>
<% Response.Charset= "utf-8"
 
Dim adoCon         'Holds the Database Connection Object
Dim rsGuestbook    'Holds the recordset for the records in the database
Dim strSQL         'Holds the SQL query to query the database 
Dim x
‘Dim x1 = "????|???|???|???|???"

'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")  
'Set an active connection to the Connection object using DSN connection
adoCon.Open "DSN=my_db"
'Create an ADO recordset object
 Set rsGuestbook = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
strSQL = "SELECT guests.Name FROM guests;"
'Open the recordset with the SQL query
rsGuestbook.Open strSQL, adoCon

Dim myArry(2)
Dim counter=0

Do Until counter=3
    myArry(counter) = rsGuestbook.Fields("Name")
    counter=counter+1
    rsGuestbook.MoveNext 
loop

x = join(myArry,"|")
 ‘Response.Write(x)   successfully print the records in hebrew

'Reset server objects
rsGuestbook.Close
Set rsGuestbook = Nothing
Set adoCon = Nothing
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body dir="rtl">

<script type="text/javascript" charset="csISOLatinHebrew"><!-- MIBENUM 11 : ISO-8859-8 -->
document.write("<% = x%>".split("|").join('<br />'));
</script>

<script>
document.write("hello1|hello2|hello3|hello4|hello5".split("|").join('<br />'));
</script>

</body>
</html>

NOTES:

  • Rearranged the page so all the asp is at the top. You will need to reinsert the hard-coded Hebrew, 'cos my non-savvy editor has destroyed it.
  • Added a doctype (XHTML 1.0)
  • Adjusted the javascript tag's charset to conform with IANA recommendation http://www.iana.org/assignments/character-sets
  • Boiled the javascript code right down to the bare essentials
  • Added a second, vanilla flavoured javascript block doing a very similar task with hard-coded Latin.

Airshow

Thank you all - i chaged to utf-8 and it 's working great now :)

Well done. Charenc issues can be little devils.

Airshow

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.