0

我正在尝试将字符串传递给 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>';

成功通过的字符串是“这是一个测试”,它失败了“这是第一个测试”

这是第二次测试”

4

5 回答 5

4

Javascript 不允许字符串中有换行符。您需要在通话\n前更换它们。sprintf()

于 2013-07-18T15:23:58.230 回答
1

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

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

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

于 2013-07-18T15:25:01.370 回答
1

您收到此错误是因为您的 javascript 变量没有任何转义... json_encode 在这里很有用。还必须在上下文中使用添加斜杠来转义双引号。

$show_txt = sprintf("showEditTextarea(%s)", json_encode($test_string));
$output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.htmlspecialchars($show_txt).';return false;">';
于 2013-07-18T15:26:32.817 回答
1

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

尝试

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

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

于 2013-07-18T15:27:53.877 回答
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));
于 2013-07-18T15:28:07.360 回答