2016-06-26 3 views
0

У меня есть очень некрасивый кусок кода в PHP, что делает что-то вроде этого:Передача закодированной переменной из php и декодирования в javascript?

for ($i = 0; $i <= ($fi_int-1); $i++) { 
     $song_uri = urlencode($songs[$i]); 

     echo "URI: " . $song_uri . "<br>"; 
     echo "<li><a href='#' onclick='PlaySong(".$song_uri.")'>" . $songs[$i] . "</li><br>"; 
    } 

Теперь, когда PlaySong() вызывается, это происходит:

<script> 

      function PlaySong(title) { 
       title = decodeURIcomponent(title)); 
       document.getElementById("player").src = "./mp3/" + title; 
      } 

</script> 

Текущая проблема, когда $ песни [$ я] в настоящее время передается PlaySong(), похоже, что сразу:

PlaySong(Name+Of+The+Song+-+Artist+LastName+blah) { 
    ... 
} 

Так JS, очевидно, имеет проблемы с ним. Он пытается добавить вещи, потому что есть плюсы ... Теперь, как я могу преобразовать этот беспорядок в строку прямо, когда он входит? Или есть лучший способ сделать это? Я уверен, что есть, но это уродство строго для меня, поэтому я не слишком забочусь о быстрой работе :)

+0

Я не понимаю проблему. Вы 'urlencode' строку, так что вы в конечном итоге с urlencoded строки. Плюсы - это пробелы в urlencoded строках, так что в этом плохого? – tkausl

+0

@tkausl Что именно не так, так это то, что он не работает. Моя идея, как я описал выше, почему она не работает, заключается в том, что, когда js берет верх, внутри списка параметров функции PlaySong(), есть бесполезная нагрузка беспорядка, которая гласит: «Возьмите имя», добавьте его в «Добавить», чтобы добавить в «Добавить» что назвать и так далее. Поэтому не имеет значения, что я пытаюсь расшифровать позже, еще до этого, в части аргумента функции он уже запутывается. Но, возможно, я ошибаюсь. Факт по-прежнему остается прежним - эта схема не работает :( – Micard

ответ

1

Вам нужны некоторые цитаты вокруг строки song_uri. Я не могу вставить код на мобильный ... но PHP должен вывести как этот

OnClick = «PlaySong („это + песня“)»

На данный момент вы получили это делать

Onclick = "PlaySong (эта + песня)", и аргумент не обрабатывается как строка

+0

Внутри цикла for for я помещаю одиночные кавычки следующим образом: 'onclick = 'PlaySong ('". $ Song_uri. "')' ', Но теперь chrome console говорит об этом: 'Uncaught SyntaxError: Неожиданный токен}' рядом с здесь: '(function (event) {PlaySong ( })' – Micard

+0

Вы не сработаете, потому что вторая одинарная кавычка закрывает первый. одинарные кавычки arround onclick для двойных кавычек. Вам нужно будет избежать их, поскольку они находятся внутри эха, так что будет что-то вроде onclick = \ ".... – rchh

+0

Удивительный, с еще несколькими настройками я сделал это! Спасибо так много! – Micard