我正在尝试将字符串传递给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”,但是“这是第一次测试
失败了这是第二次测试“
答案 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));