所以问题来了。我在MySQL数据库中有文本形式的数据。数据是通过mysql_real_sescape_string插入的。我对显示给用户的数据没有问题。
在某个时刻,我想将这些数据传递到一个名为foo的javascript函数中。
// This is a PHP block of code
// $someText is text retrieved from the database
echo "<img src=someimage.gif onclick='"foo('{$someText}')'">";
如果$someText中的数据有换行符,如:
Line 1
Line 2
Line 3
javascript中断是因为html输出是
<img src=someimage.gif onclick="foo('line1
line2
line3')">
所以问题是,如何将$someText传递给我的javascript foo函数,同时保留换行和回车,而不破坏代码?
====================================================
使用这样的json后:
echo "<img src=someimage.gif onclick='"foo($newData)'">";
它输出的HTML是这样的:
onclick="foo("line 1<br '/>'r'nline 2");">
显示图像,后面跟着''r''nline 2");">
json_encode()
是前进的道路:
$json = json_encode($someText); # this creates valid JS
$safe = HtmlSpecialChars($json); # this allows it to be used in an HTML attribute
echo "<img src=someimage.gif onclick='"foo($safe)'">";
您可以在此处看到演示:http://codepad.org/TK45YErZ
如果我的口译不差,你可以这样做:
// This is a PHP block of code
// $someText is text retrieved from the database
echo "<img src=someimage.gif onclick='"foo('{".trim( preg_replace( '/'s+/', ' ',$someText ) )."}')'">";
从HTML:中提取JavaScript可以省去很多麻烦
<img id="myImage" src="someimage.gif"/>
<script type="text/javascript">
var str = <?php echo json_encode($json); ?>;
document.getElementById('myImage').addEventListener(
'click',
function() {
foo(str);
}
);
</script>
或者类似的东西。。。
只有json_encode()就足以逃离新行
echo "<img src=someimage.gif onclick='"foo(".json_encode($newData).")'">";