在Javascript中解码CakePHP编码的URL

时间:2012-01-30 10:27:02

标签: javascript cakephp

我使用cakePHP中的$ Html-> link()menthod在我的页面上生成链接,我的代码就像这样

echo $this->Html->link(substr($topsongs[$i]['song_details']['song_name'], 0, 18), array("?"=>array('song_name'=>$song,'song_id'=>$song_id)), array('class' => 'top_links link', 'id' => 'playlist-add' . $i, 'onclick' => "link_play(this.id);return false;"));

如代码所示,我将链接ID传递给JS函数。当重新审视song_name keystring时,它显示为编码字符串,因为它包含“+”而不是空格和其他字符。此song_name实际上是一个提供给Flowplayer进行播放的文件名。所以它必须摆脱编码的东西。如何在我的Javascript函数中解码这些变量..?

2 个答案:

答案 0 :(得分:1)

你可以使用一些js解码: http://www.webtoolkit.info/javascript-url-decode-encode.html

或尝试手动附加文件的字符串:

echo $this->Html->link($name, $this->Html->url(substr(...), true).'?song_name=foo');

答案 1 :(得分:0)

我认为在javascript中没有一种直接的方式来“解码”那种字符串。 你能做的是

link = link.replace('+', ' ');

并为其他角色做同样的事情......

最终,你可以构建一个类似这样的函数:

function decode(string){
   var encoded = ['+', 'a', 'b', 'c'];
   var decoded = [' ', ' ', ' ', ' '];
   for (var i = 0; i < encoded.length; i++){
      string = string.replace(encoded[i], decoded[i]);
   }
   return string;
}

你设置两个数组,第一个是你想要替换的字符,第二个是你要用它们替换它们的字符,顺序相同。