错误:未终止的字符串文字

时间:2011-06-09 13:38:10

标签: php javascript jquery zend-form

我有一些从Zend_Form生成的HTML数据。

我想将其附加到div#wrapper元素,但我的尝试引发了错误:Unterminated string literal

我该怎么办才能修复它?

注意:好的,好像每个人都认为我忘记将php标记放在我的代码上,但事实并非如此。这是我的“真实”代码

<?php

class Admin_Elements_Dialog {
private $_name;
private $_title;
private $_action;
private $_button = null;
private $_content;
private $_options = array();

public function __construct($options) {
    $this->_options = $options;        
}

public function setName($name) {
    $this->_name = $name;

    return $this;    
}

public function setTitle($title) {
    $this->_title = $title;

    return $this;    
}

public function setAction($action) {
    $this->_action = $action;

    return $this;    
}

public function setOpener($button) {
    if ($button instanceof Admin_Elements_Buttons)
        $this->_button = $button;

    return $this;    
}

public function setContent($content) {
    $this->_content = $content;

    return $this;
}

public function renderScript() {
    $html = array();

    $html[] = '$(document).ready(function() {
                    $("body").append(\'<div id="' . $this->_name . '" title="' . $this->_title . '" class="ui-helper-hidden">' . $this->_content . '</div>\');

                    var dialog = $("#' . $this->_name . '").dialog(' . Zend_Json::encode($this->_options, false, array('enableJsonExprFinder' => true)) . '); 

                    $("#' . $this->_button->getId() . '").click(function() {
                        $("#' . $this->_name . '").dialog("open");

                        return false;
                    });
                });';

    $html[] = '';

    return join($html, PHP_EOL);    
}
}
?>

6 个答案:

答案 0 :(得分:1)

您在Javascript中使用PHP并置运算符.

Javascript的连接运算符为+

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog">' + <?php echo $this->form->render() ?> + '</div>');
});

此外,PHP代码插入逐字地插入到您的页面中。如果$this->form->render()没有生成字面上引用封装的字符串,那么生成的Javascript将无效。

你的意思是:

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render() ?></div>');
});

但肯定有更好的方法。这样,你就必须注意可逃避的字符和换行符。

另外,我无法抗拒:这是“提前谢谢”;没有尾随“d”。

答案 1 :(得分:1)

您正在混合使用PHP和JavaScript代码。您始终需要记住,PHP在服务器上运行,而Javascript在客户端上运行。

你想要的可能就是:

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render(); ?></div>');
});

显然,您需要确保该字符串中的所有换行符和单引号都已转义(\n\'

答案 2 :(得分:1)

好的,我通过使用函数preg_replace

删除所有新行和分页符来解决我的问题
preg_replace('/[\r\n]+/', null, $this->_content)

答案 3 :(得分:0)

您混合使用javascript和PHP代码。

我认为如果你的js是由PHP脚本生成的,那可能会更好:

  <?php /** I'm in PHP */ ?>
  $(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php $this->form->render()?></div>');
   });

答案 4 :(得分:0)

在客户端运行Javascript之前,在服务器端解析PHP。因此,PHP将直接注入Javascript字符串。然后JQuery会将它附加到您指定的位置。

$(document).ready(function() {
     $("div#wrapper").append('<div id="dialog" title="Add new blog"><?php echo $this->form->render() ?></div>');
});

答案 5 :(得分:0)

基本上,当您的PHP代码在服务器上呈现时,它会解析<?php ?>之间的所有内容。因此,当您的代码呈现时,它会变成类似

的内容
$(document).ready(function() {
    $("div#wrapper").append('<div id="dialog" title="Add new blog">' + <form></form> + '</div>');
});

请注意,生成的JS代码的<form></form>元素未包含在引号中。这会导致“未终止的字符串文字”错误。

要解决这个问题,你只需要用引号括起来,比如

$("div#wrapper").append(
    '<div id="dialog" title="Add new blog">' + '<?php $this->form->render(); ?>' + '</div>'
)

或者,您可以将PHP放入JS字符串中:

$("div#wrapper").append(
    '<div id="dialog" title="Add new blog"><?php $this->form->render(); ?></div>'
)