使用PHP回显HTML导致语法错误,因为引号

时间:2013-06-19 11:43:33

标签: php javascript jquery html knockout.js

我正在使用带有PHP的knockout.js,我正在尝试发出一个GET请求,然后返回一个HTML / knockout表单。这样做的原因是因为表单将被其他人使用,而不是复制/粘贴相当大的代码块,只是向我的服务器发出请求返回HTML / knockout的代码就少了。

//code on another server to request form from my server
$.ajax({
      //request here
    })
</script>

<div id = "update_div">
        <!--form data goes here when received -->
</div>

现在,这是我服务器上的代码。问题在于,因为我必须使用php回复并且我正在返回文本,所以我需要在我正在回应的文本周围使用单引号或双引号。但是,我正在使用knockout.js和knockout.js验证插件,它需要单引号和双引号,基本上取消包含回声的引号。

例如,

 <?
    if($_GET['something']){
       echo '
         <tr>
            <td>Full Name</td>
            <td><span data-bind="validationOptions: { insertMessages: false}">
            <input type="text" data-bind="value: fullName, valueUpdate: 'afterkeydown'"/></span></td> 
            <td data-bind="validationMessage: fullName"></td>
        </tr>
       ';
     }
 ?>

特别导致问题的一行是

<input type="text" data-bind="value: fullName, valueUpdate: 'afterkeydown'"/></span></td>

返回的错误是

Parse error: syntax error, unexpected 'afterkeydown' (T_STRING)

当我回声时,我使用单引号,因为我想将其作为文本返回,但是,在其中,我需要对不同的元素使用单引号和双引号。有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:4)

试试这个 -

<?
    if($_GET['something']){
       echo '
         <tr>
            <td>Full Name</td>
            <td><span data-bind="validationOptions: { insertMessages: false}">
            <input type="text" data-bind="value: fullName, valueUpdate: \'afterkeydown\'"/></span></td> 
            <td data-bind="validationMessage: fullName"><center></center></td>
        </tr>
       ';
     }
 ?>

答案 1 :(得分:3)

你需要逃脱它们

echo '
     <tr>
        <td>Full Name</td>
        <td><span data-bind="validationOptions: { insertMessages: false}">
        <input type="text" data-bind="value: fullName, valueUpdate: \'afterkeydown\'"/></span></td> 
        <td data-bind="validationMessage: fullName"><center></center></td>
    </tr>
   ';

答案 2 :(得分:2)

PHP是一个超文本预处理器,您可以在不使用echo的情况下编写原始HTML [并获得此类引用噩梦]:

<?php if($_GET['something']): ?>

 <tr>
    <td>Full Name</td>
    <td><span data-bind="validationOptions: { insertMessages: false }">
    <input type="text" data-bind="value: fullName, valueUpdate: 'afterkeydown'"/></span></td> 
    <td data-bind="validationMessage: fullName"><center></center></td>
</tr>

<?php endif; ?>

[请参阅SO语法高亮显示如何正常工作!]

BTW,自{4}以来不推荐使用<center>标记。

答案 3 :(得分:1)

只要你有这样的文字:

TEXT 'LIKE' THIS

并且您希望回显它,只需在'带有\:

前面添加前缀

echo 'asdfadsf\'asdfasdf'

所以在你的情况下:

echo '
 <tr>
    <td>Full Name</td>
    <td><span data-bind="validationOptions: { insertMessages: false}">
    <input type="text" data-bind="value: fullName, valueUpdate: \'afterkeydown\'"/></span></td> 
    <td data-bind="validationMessage: fullName"><center></center></td>
</tr>

';