将字符串传递给Javascript函数不起作用

时间:2013-07-18 15:20:06

标签: php javascript

我正在尝试将字符串传递给javascript函数,该函数在可编辑的文本区域中打开该字符串。如果字符串不包含换行符,则会成功传递。但是当有一个新的行字符时它会失败。 我在PHP中的代码看起来像

$show_txt = sprintf("showEditTextarea('%s')", $test_string);
$output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.$show_txt.';return false;">';

javascript函数看起来像 -

$output[] = '<script type="text/javascript">
   var showEditTextarea = function(test_string) {
                 alert(test_string);
    }
    </script>';

成功传递的字符串是“This is a test”,但是“这是第一次测试

失败了

这是第二次测试“

5 个答案:

答案 0 :(得分:4)

Javascript不允许字符串中的换行符。您需要在\n来电之前将其替换为sprintf()

答案 1 :(得分:1)

为什么不在将字符串传递给JavaScript函数之前用\ r \ n替换php字符串中的所有空格?看看是否有效。

如果这不起作用,那么试试这个: str_replace($ test,“\ n”,“\ n”);

替换为两个\可能会起作用,因为它将封装。

答案 2 :(得分:1)

您收到此错误,因为没有任何内容可以转义您的javascript变量... json_encode在这里很有用。还必须在上下文中使用addslashes来转义双引号。

$show_txt = sprintf("showEditTextarea(%s)", json_encode($test_string));
$output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.htmlspecialchars($show_txt).';return false;">';

答案 3 :(得分:1)

我会尽量避免在PHP变量中存储HTML或JS,但是如果你确实需要将HTML存储在PHP变量中,那么你需要转义新的行字符。

$test_string = str_replace("\n", "\\\n", $test_string);

请务必在str_replace中使用双引号,否则\ n将被解释为字面\ n而不是新行字符。

答案 4 :(得分:1)

尝试使用此代码删除新行:

$show_txt = sprintf("showEditTextarea('%s')", str_replace(PHP_EOL, '', $test_string));

或替换为:\n

$show_txt = sprintf("showEditTextarea('%s')", str_replace(PHP_EOL, '\n', $test_string));