【问题标题】:Escape quotes from the results of a SQL Server querySQL Server 查询结果中的转义引号
【发布时间】:2018-01-25 22:48:13
【问题描述】:

我有这个执行查询的 PHP 代码。

$sql = "SELECT ACCOUNTNUM as AccountNumber, NAME AS CompanyName
FROM VENDORTABLE";

$stmt = sqlsrv_query( $conn, $sql );

if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

然后我使用查询结果来填充数据列表:

<form method="POST">

<label for="A">Number/Name:</label><br>
<input list="A" name="name">
<datalist id="A">
  <?php
    while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) { ?>
      <option value='<?php echo $row[0].",".$row[1] ?>'><?php
    }
  ?>
</datalist><br><br>

<input type="submit" value="Continue"">

</form>

问题是某些结果包含 HTML 不喜欢的字符(即 ' 和 "),并且当循环将它们放入数据列表时,这些结果会被切断(例如,“Mike's”变成“Mike”) .

我怎样才能使放入数据列表的内容包括整个结果和数据中存在的任何引号?

我试过这样做:

<?php
    while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) { ?>
      <option value='<?php echo $row[0].",".htmlspecialchars($row[1]) ?>'><?php
    }
  ?>

同样使用addslashes()而不是htmlspecialchars(),前者只是在第一次出现引号时添加一个斜杠,但之后仍会切断所有内容

【问题讨论】:

    标签: php html sql-server


    【解决方案1】:

    两个建议:

    • 将值属性周围的单引号改为双引号。
    • 在 htmlspecialchars 方法中添加 ENT_QUOTES 标志

    &lt;option value="&lt;?php echo $row[0].",".htmlspecialchars($row[1],ENT_QUOTES) ?&gt;"&gt;

    【讨论】:

      【解决方案2】:

      在 HTML 属性值中,您可以使用 HTML 实体,因此请使用 htmlentities 函数转义您的字符串:

      htmlentities($row[1], ENT_QUOTES)
      

      还可以查看可以传递给此函数的选项。

      【讨论】:

        猜你喜欢
        • 2017-04-05
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多