在服务器端html中逃避大于和小于php的回声

时间:2011-08-09 19:18:28

标签: php echo

我正在尝试在jQuery自动完成框中进行选择之后,简单地将一个函数从服务器php页面回送到客户端浏览器,以便该函数可以根据需要(客户端)处理,其值为自动完成框。自动完成在php页面中如下:

mypage.php

<html>
<head>
    <title>Autocomplete</title>   

    <link href="../../jqSuitePHP/themes/redmond/jquery-ui-1.8.2.custom.css" id="skin" rel="stylesheet" type="text/css" />

    <script src="../../jqSuitePHP/js/jquery-1.6.min.js" type="text/javascript"></script>
    <script src="../../jqSuitePHP/js/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>


    <script>
        $(function ac_boxes() {

            $("#dlr").autocomplete({
                source: "dlrAutocompleteSearch.php",
                minLength: 2,
                search   : function(){$(this).addClass('ui-autocomplete-loading');},
                open     : function(){$(this).removeClass('ui-autocomplete-loading');},
                select: function( event, ui ) {

                    // Here's my attempt at calling the client side 'test' function
                    <?php echo '<script>window[test](ui.item.value)</script>;' ?>

                }
            });
        });
    </script>
</head>
<body>
---------
</body>
</html>

但是&lt;和&gt;造成问题。如果我删除&lt;和&gt;,页面完全处理(当然没有'select'功能。如果我添加&lt;和&gt;,页面不会处理。

我尝试使用php htmlentities()分配字符串:

<?php
$val = htmlentities('<script>window[test](ui.item.value)</script>;');
echo $val;
?>

但这似乎也不起作用。

我的问题源于php是否在jQuery脚本中?如果是这样,那么从自动完成的'select'方法调用php的另一种方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我不认为这段代码正在做你认为它正在做的事情;当你加载页面时,执行PHP并在源代码中得到类似的结果:

<script>
...
select: function( event, ui ) {
    <script>window[test](ui.item.value)</script>;
}
...
</script>

哪个不正确(脚本标签中不需要script个标签;正如您所见,它不会做任何事情,只会导致问题。)

如果要在选择更改时执行某些PHP,则必须通过AJAX,提交表单或其他任何方式再次调用服务器。这样的事情可能更像你想要的东西:

select: function(event, ui) {
    // send the selected value to the server for processing
    $.get("processChange.php", {value: ui.item.value});
}

有关详情,请参阅$ .get()上的JQuery docs

另一方面,如果您要做的就是使用所选值调用另一个客户端javascript函数(例如test),则不需要PHP来回显任何内容。这应该是诀窍:

<script>
function test(args) {
    // ...
}

$("#dlr").autocomplete({
    // ...
    select: function(event, ui) {
        test(ui.item.value);
    }
}
</script>

答案 1 :(得分:0)

您可以像使用HTML一样使用&lt;&gt;。您还可以使用replace()函数查找所有&lt;和&gt;并替换它们。