2013-07-18 52 views
0

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

$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>'; 

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

这是第二个测试“

+5

您错过了''标记中的<<'。 –

+1

您是否首先逃避$ test_string?即将\ n转换为\\ n – jeff

+5

您不应该使用PHP编写JS。想想重新设计你的代码来避免这种情况。 – sdespont

回答

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;">'; 
+0

我试过但它没有工作!这是我试过的... –

+0

$ show_txt = sprintf(“showEditTextarea(%s,%s,%s,%s)”,$ sid,json_encode($ dstring),$ dversion,$ dtr_version); $ output [] ='' ; –

+0

这是我的真实代码。 –

1

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

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

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

1

我会避免存储HTML或JS在PHP变量尽可能的,但如果你确实需要的HTML存储在一个PHP变量,那么你就需要逃避新行字符。

尝试

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

一定要使用双引号的str_replace函数,否则\ n将被解释为字面上的\ n,而不是新的行字符。

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)); 
相关问题