2017-07-24 86 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