Php 将字符串传递给Javascript函数无效

Php 将字符串传递给Javascript函数无效,php,javascript,Php,Javascript,我试图将一个字符串传递给javascript函数,该函数在可编辑文本区域中打开该字符串。如果字符串不包含新行字符,则会成功传递该字符串。但是当有一个新行字符时,它就失败了。 我的PHP代码看起来像 $show_txt = sprintf("showEditTextarea('%s')", $test_string); $output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.$show_txt.';return fals

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

$show_txt = sprintf("showEditTextarea('%s')", $test_string);
$output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.$show_txt.';return false;">';
$show_txt=sprintf(“showEditTextarea(“%s”),$test_string);
$output[]='';
javascript函数如下所示-

$output[] = '<script type="text/javascript">
   var showEditTextarea = function(test_string) {
                 alert(test_string);
    }
    </script>';
$output[]='
var showEditTextarea=函数(测试字符串){
警报(测试字符串);
}
';
成功传递的字符串是“这是一个测试”,而失败的字符串是“这是第一个测试”


这是第二个测试“

Javascript不允许字符串中使用换行符。在调用
sprintf()
之前,您需要将它们替换为
\n

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

如果不起作用,请尝试以下方法: str_替换($test,“\n”,“\n”)


替换为两个\可能会起到封装的作用。

您会遇到此错误,因为没有任何内容可以转义javascript变量。。。json_编码在这里很有用。addslashes还必须在上下文中使用,以转义双引号

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

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

试一试


请确保在str\u replace中使用双引号,否则\n将被解释为字面意义上的\n而不是新行字符。

尝试以下代码,删除新行:

$show_txt = sprintf("showEditTextarea('%s')", str_replace(PHP_EOL, '', $test_string));
或替换为:
\n

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

您丢失了
您是否首先转义$test\u字符串?i、 e.将\n转换为\\您不应使用PHP编写JS。考虑重新设计代码以避免这种情况。$show_txt=sprintf(“showEditTextarea(%s,%s,%s,%s)”,$sid,json_encode($dstring),$dversion,$dtr_version)$输出[]='';在json_编码调用中包装$sid、$dversion和$dtr_版本。唯一可行的方法是,如果这些值是integerssprintf(“showEditTextarea(%s,%s,%s,%s)”、json_encode($sid)、json_encode($dstring)、json_encode($dversion)、json_encode($dtr_version));在您之前的评论中,您所说的“如果这些值是整数,那么这将是唯一可行的方法”是什么意思?
$show_txt = sprintf("showEditTextarea('%s')", str_replace(PHP_EOL, '\n', $test_string));