json escape from drupal api to use in regular php environment and jquery
I found this nifty plugin that lets me create dashboard widgets from external files.
http://civicactions.com/blog/2009/feb/22/jquerydashboard_plugin#comments
the only problem is that its build around jquery 1.3.2 and I'm stubborn and want to use 1.4.4
The plugin still works with the latest jquery but it looses the functionality to load in the external widget content via the json call.
Well, I take that back it does load the content BUT with now a new exception. The content cannot contain <.开发者_如何学运维 >, & or else it will not parse correctly and not load.
In the ajax file for this plugin is this function that I think is the culprit.
// Taken from http://api.drupal.org/api/function/drupal_to_js/7 (GPL 2)
function to_js($var) {
// json_encode() does not escape <, > and &, so we do it with str_replace()
return str_replace(array("<", ">", "&"), array('\x3c', '\x3e', '\x26'), json_encode($var));
}
this takes in the data and passes it back, but as of 1.4.4 it won't work, I have no idea why. Is there an alternative way to do this? If i comment out this function then the widgets won't load all together regardless if it contains characters it doesn't like.
As an example:
jquery 1.3.2 parses
<p>Hello World</p>
jquery 1.4+ will only parse
Hello World (if I include the <p></p> then it won't load)
You can rewrite or ask to the plugin developer to update the plugin. In order to do it yourself take a look first at Release Notes for all 1.4+ versions in order to check what was modified mainly in the ajax function. The complexity of your problem can range from very simple to very complex. You may even discover some bug that you will want to report back to jQuery.
You should replace on your end (prob PHP)
return '"'. str_replace(array("\r", "\n", "<", ">", "&"),
array('\r', '\n', '\x3c', '\x3e', '\x26'),
addslashes($var)) .'"';
to
return '"'. str_replace(array("\r", "\n", "<", ">", "&"),
array('\r', '\n', '\u003c', '\u003e', '\u0026'),
str_replace("\'","'", addslashes($var))) .'"';
精彩评论