2017-07-24 76 views
0

我試圖插入一個PHP的EOT字符串到一個JS代碼,我需要編碼它,因爲它有一些\n在裏面。我不能用簡單的jsonencode來做,因爲它返回的代碼是",我不需要它們。編碼從PHP到JavaScript的字符串返回錯誤

所以,我想這兩個方法,兩者均返回一個錯誤:

<?php 
$string = $v['survey']; 
function escapeJavaScriptText($string) 
{ 
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
} 
?> 

<?php echo escapeJavaScriptText(); ?> 

我也試過:

<?php 
$string = $v['survey']; 
function javascript_escape($string) { 
    $new_str = ''; 

    $str_len = strlen($string); 
    for($i = 0; $i < $str_len; $i++) { 
     $new_str .= '\\x' . sprintf('%02x', ord(substr($string, $i, 1))); 
    } 

    return $new_str; 
} 
?> 

<?php echo javascript_escape(); ?> 

都返回: Missing argument 1 for escapeJavaScriptText()Undefined variable: string in<?php echo $string; ?>返回的代碼我需要(只是沒有編碼)。

我錯過了什麼?

+2

''沒有傳入'$ string',所以函數中的'$ string'是未定義的/超出範圍。要麼'<?php echo javascript_escape($ string); ?>'或'function javascript_escape(){global $ string;' – chris85

+0

哦,我真的錯過了!它現在的作品,但它似乎並沒有解決我的問題與JavaScript編碼... http://採取。ms/57aXU – Ricardo

+0

我通過替換'str_replace('''''''''''str_replace(''','''''。 謝謝! – Ricardo

回答

0
<?php 
$string = $v['survey']; 
function javascript_escape($string) { 
$new_str = ''; 
$str_len = strlen($string); 
for($i = 0; $i < $str_len; $i++) { 
    $new_str .= '\\x' . sprintf('%02x', ord(substr($string, $i,  1))); 
} 
return $new_str; 
} 
?> 
<?php echo javascript_escape($string); ?> 
0

這是因爲您的函數和全局代碼中的變量範圍不同。在PHP中,默認情況下,函數不能訪問全局變量。

在你的情況下,變量$string,你正在嘗試使用函數javascript_escape,是一個全局變量。所以,你有幾種方法可以避免Undefined Variable異常。

1.使用「全局」關鍵字來訪問函數中的全局變量。

函數定義之後,您只需要指定全局變量這樣(從參數列表中刪除$string):

function javascript_escape() { 
    global $string; 

    $new_str = ''; 

    $str_len = strlen($string); 
    for($i = 0; $i < $str_len; $i++) { 
     $new_str .= '\\x' . sprintf('%02x', ord(substr($string, $i, 1))); 
    } 

    return $new_str; 
} 

function escapeJavaScriptText() 
{ 
    global $string; 
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
} 

2.通$string作爲參數的函數調用。

如果你有一個不使用全局變量的理由,那麼每次調用該函數時都可以傳遞未轉義的字符串。

<?php echo javascript_escape($string); ?> 

3.使用預先轉義的字符串。

如果你必須使用$string通過你的函數多次編碼,這會是一個很好的做法,以逃避變量在你的代碼的開頭,並使用它,而你每次需要使用這個變量的時候調用逃生功能:

$escaped_string = javascript_escape($string); 

... 

<?php echo $escaped_string; ?> 

另外,我建議你閱讀有關變量的作用域的官方文檔:http://php.net/manual/en/language.variables.scope.php