2013-07-18 50 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)); 
相關問題