Печать переменной varchar php внутри функции javascript - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь напечатать значение переменной в функции javascript. Если переменная является целым числом ($ myInteger), она работает нормально, но когда я хочу получить доступ к тексту ($ myText), выдается ошибка

<?php $myText = 'some text';
    $myInteger = '220';
?>

<script type="text/javascript">

<?php print("var myInteger = " . $myInteger . " ;\n");?> //works fine
<?php print("var myText = " . $myText . " ;\n");?> //doens't work

</script>

Может кто-нибудь объяснить мне, почему это происходит и как это изменить?

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Проблема с вашим кодом из вопроса заключается в том, что в сгенерированном коде Javascript будут отсутствовать кавычки вокруг строки.

Вы можете добавить к выводу кавычки вручную, как показано ниже:

print("var myText = '". $myText. "';\n");

Тем не менее, обратите внимание, что это прервется, если строка сама содержит кавычки (или символы новой строки, или несколько других), поэтому вам нужно ее избежать.

Это можно решить с помощью addslashes() функция, среди прочего, но это может по-прежнему иметь проблемы.

Лучшим подходом было бы использование встроенной в PHP функции JSON, которая разработана специально для генерации переменных Javascript, поэтому она будет выполнять все экранирование длявы правильно.

Функция, которую вы ищете, это json_encode().Вы бы использовали его следующим образом:

print("var myText = ". json_encode($myText). ";\n");

Это будет работать с любым типом переменной - целым числом, строкой или даже массивом.

Надеюсь, что поможет.

1 голос
/ 07 июля 2011

Без дополнительного кода мы не знаем точно, что вы пытаетесь сделать или какую ошибку вы получаете (или откуда вообще), но если бы мне пришлось угадывать:

Если вы ставитестрока текста в переменную javascript, вам, вероятно, нужно заключить ее в кавычки.

<?php print("var myText = '" . $myText . "' ;\n");?>
                      ---^^^-------------^^^----

// Or even better:
<?php print("var myText = '$myText' ;\n");?>

ADDENDUM В соответствии с комментарием ниже, не используйте это, если вы ожидаете, что ваш $myTextсодержать кавычки.

...