[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

JS Issue with apostrophe

Posted on 2009-12-30
6
Medium Priority
?
324 Views
Last Modified: 2012-05-08
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!
0
Comment
Question by:Bob Schneider
6 Comments
 
LVL 40

Assisted Solution

by:Gurvinder Pal Singh
Gurvinder Pal Singh earned 200 total points
ID: 26145601
replace apostrophe with &#39;

0
 
LVL 3

Assisted Solution

by:Andreaspisc
Andreaspisc earned 600 total points
ID: 26146016
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, "'", "''")
0
 

Author Comment

by:Bob Schneider
ID: 26146091
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?
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 75

Accepted Solution

by:
Michel Plungjan earned 1200 total points
ID: 26146418
you want to replace all single quotes by \'


0
 
LVL 3

Expert Comment

by:Andreaspisc
ID: 26147102
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.
0
 

Author Comment

by:Bob Schneider
ID: 26147262
Thank you very much!!!  Very informative.
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Today, the web development industry is booming, and many people consider it to be their vocation. The question you may be asking yourself is – how do I become a web developer?
In this blog, we’ll look at how improvements to Percona XtraDB Cluster improved IST performance.
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …
Suggested Courses
Course of the Month19 days, 1 hour left to enroll

834 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question