Escaping
Search:

Taking a string in one language and converting it into a string in another is sometimes annoying. One that is annoying, but yet possible, is converting a PHP string of maybe a web page or maybe an error message or whatever, and passing the string through to JavaScript to be manipulated in some way or another.

function QuoteForJavaScript($str, $SkipQuotes = false) {
    $R = array("/(<scr)(ipt)/i" => "$1\"+\"$2",  // Break up "<script" tags
	       '/\\\\/' => '\\\\',               // Escape backslashes
	       '/"/' => '\\"',                   // Escape quotes
	       '/\'/' => '\\\'',                 // Escape single quotes
	       "/\r\n/" => "\n",                 // Convert DOS newlines into Unix
	       "/\r/" => "\n",                   // Convert Mac newlines into Unix
	       "/\n/" => "\\n\"+\n\"");          // Convert Unix newlines
	       
    $str = preg_replace(array_keys($R), array_values($R), $str);
    
    if (! $SkipQuotes)
      return '"' . $str . '"';
      
    return $str;
}

To use this glorious function, you need to merely pass it a string and optionally use the $SkipQuotes parameter. Here are a few examples of PHP writing some JavaScript.

$str = "12345 abcde";
echo "js_var = " . QuoteForJavaScript($str) . ";\n";

// Produces:
//
// js_var = "12345 abcde";


$str = "It's a \"quoted\" thing!\nAnd a backslash \ on a second line!";
echo "js_var = " . QuoteForJavaScript($str) . ";\n";

// This result is a bit more interesting:
//
// js_var = "It\'s a \"quoted\" thing!\n" +
// "And a backslash \\ on a second line!";
//
// Everything is escaped properly, the newline is preserved, and the string
// splits on the newline for readability.


// If you need to use it in the middle of some other JavaScript, you can
// turn off the addition of the outer double quotes.

// Leave PHP code and go to the HTML (which should be in the middle of 
// a >script< tag...
?>
js_var = "This is string number <?= QuoteForJavaScript(1234, true) ?>";
<?PHP
// Return to PHP to complete the example

// That produces this following line, without the extra quotes around
// the number.
//
// js_var = "This is string number 1234";

Have fun using this function! Just keep in mind that it isn't designed for binary data. Well, for that matter, JavaScript really isn't either.

In South Africa, a fish known as the payara has saber teeth that are 5 cm (2 in) long. A common bait used to catch these freshwater fish is a small piranha. Tyler Akins! <>
Contact Me - Legal Info