JS Issue with apostrophe

I am having trouble with a scrolling marquee if the message I want to scroll contains an apostrophe.  Here is the code (note that sMarqueeMsg is an asp variable drawing it's value from a sql server db.:

[code]
var obj0;
  var obj1;
  var obj2;
  var j;
  var temp;
  var i=0;
  var speed=25;
  var message='<%=sMarqueeMsg%>';

function imgScroll() {
   obj0.style.left=i+'px';
   obj1.style.left=j+'px';
     
   i--;
   j--;

if(i<-temp-1) {
   i=temp;
 }

if(j<-temp-1) {
   j=temp;
 }
  scroller=setTimeout('imgScroll()',speed);
 }

window.onload=function() {
   obj0=document.getElementById('ticker0');
   obj1=document.getElementById('ticker1');
   obj2=document.getElementById('container');
   obj0.firstChild.nodeValue=obj1.firstChild.nodeValue=message;
   j=obj0.offsetWidth;
   temp=j;
   obj2.className='setup';
   
   obj0.style.width=obj1.style.width=temp+'px';

   imgScroll();
 }
[/code]

Here is the asp for the variable:
[code]
      Set rs = Server.CreateObject("ADODB.Recordset")
      sql = "SELECT Message FROM MarqueeMsg WHERE SchoolsID = " & Session("school_id")
      rs.Open sql, conn, 1, 2
      If rs.RecordCount> 0 Then sMarqueeMsg = Space(25) & Replace(rs(0).Value, "''", "'")
      rs.Close
      Set rs = Nothing
[/code]

Any help would be much appreciated!
Bob SchneiderCo-OwnerAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Gurvinder Pal SinghCommented:
replace apostrophe with &#39;

AndreaspiscCommented:
On the server side your expression
    Replace(rs(0).Value, "''", "'")
will replace each instance of two consecutive single quotes in your message by one single quote.  In fact, you want to do the opposite, so that a message such as "bob's problem" becomes "bob''s problem".  Then the code generated from your line
   var message='<%=sMarqueeMsg%>';
will be
   var message='bob''s problem';
which will give variable message the value "bob's problem".

Is that clear?  In brief, change the line in your asp code to read:
   If rs.RecordCount> 0 Then sMarqueeMsg = Space(25) & Replace(rs(0).Value, "'", "''")
Bob SchneiderCo-OwnerAuthor Commented:
1) I tried the first solution using sMarqueeMsg = Replace(sMarqueeMsg, "'", "&#39") and it rendered &#39 where there should have been an apostrophe in the marquee.

2) Regarding the suggested backwards escape of the apostrophe, when I send it into the db I replace the single apostrophe with double apostrophe so that the sql works.  Then I replace the double with the single bringing it back out.  This is why the replace is as it is.  Are you saying that is not correct?
Determine the Perfect Price for Your IT Services

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden with our free interactive tool and use it to determine the right price for your IT services. Download your free eBook now!

Michel PlungjanIT ExpertCommented:
you want to replace all single quotes by \'


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
AndreaspiscCommented:
Sorry, I was getting my string literal syntaxes confused.

To consider your first bit of code: this is mainly JavaScript to be executed at the browser, but one bit (with <%=sMarqueeMsg%>) will be executed at the server to produce a line of code like:
   var message='Merry Xmas';
However, if sMarqueeMsg contains the string to be displayed, we have a problem if that string contains anything that might be interpreted as a escape sequence when the JavaScript is run in the browser.  Thus if we want to display
   Happy Xmas's.  \ is a backslash
we must generate code like
   var message='Happy Xmas\'s.  \\ is a backslash';

Now, you might think that
   Replace( Replace( sMarqueeMsg, "\", "\\"), "'", "\'" )
would do the trick, but of course this is VBScript and the literal strings have to follow the escape conventions for that language.  So the final line of code
becomes:
   var message='<%=Replace( Replace( sMarqueeMsg,
         chr(92), chr(92)&chr(92)), "'", chr(92)&"'" )%>';

The second thing to consider is whether you need to half the number of quotes in the string retrieved from SQL.  I rather suspect that you don't.  If you put it in the database by constructing and executing an SQL statement along the lines of
   insert into MarqueeMsg(SchoolsId,MarqueeMsg) values (23,"Bob''s problem")
then the SQL rules for escapes in string literals would have converted to doubled character into a single one.  The code you have:
   If rs.RecordCount> 0 Then sMarqueeMsg = Space(25) & Replace(rs(0).Value, "''", "'")
would then do nothing unless you actually had two quotes in your original, in which case it would incorrectly remove one of them.  It would be worth testing this case when everything else is working to be sure you have it right.
Bob SchneiderCo-OwnerAuthor Commented:
Thank you very much!!!  Very informative.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Scripting Languages

From novice to tech pro — start learning today.