使用PHP将文本从MySQL传递到Javascript函数时遇到问题


Having trouble passing text from MySQL to a Javascript function using PHP

所以问题来了。我在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).")'">";