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.:

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

function imgScroll() {

if(i<-temp-1) {

if(j<-temp-1) {

window.onload=function() {


Here is the asp for the variable:
      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, "''", "'")
      Set rs = Nothing

Any help would be much appreciated!
Bob SchneiderCo-OwnerAsked:
Who is Participating?
Michel PlungjanIT ExpertCommented:
you want to replace all single quotes by \'

Gurvinder Pal SinghCommented:
replace apostrophe with &#39;

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, "'", "''")
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

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?
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
   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.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.