【问题标题】:How to escape MS-SQL output in html/php?如何在 html/php 中转义 MS-SQL 输出?
【发布时间】:2016-03-01 13:26:33
【问题描述】:

听起来很简单,但我现在有点困惑。

我有这个 DB 对象,其中包含一些我想以 html 形式输出的值。

简化问题: $result 是我的 db 对象,这是我想要输出一些可以包含双引号或单引号的文本的 html 输入。

<input class="someclass" name="desc" id="descID" type="text" value="<?=$result['desc'];?>" placeholder="<Description>" />

如果$result['desc'] 包含这样的文字:'你听说过“foobar”吗?' 第一个双引号之后的所有内容都被切断并以这样的方式结束:'你听说过'吗。

我已经尝试过但没有成功:

  • htmlspecialchars 像这样value="&lt;?=htmlspecialchars($result['desc']);?&gt;" 或像这样value="&lt;?=htmlspecialchars($result['desc'], ENT_QUOTES);?&gt;"

  • 添加斜杠

注意:我的 DB(mssql) 正确保存了字符串。只在我的 html 中有问题。

如果你能在这里帮助我,我会很高兴。谢谢。

【问题讨论】:

  • 只是为了好玩,你也试过htmlspecialentities吗?
  • &lt;?php $t = 'Did you hear about "foobar"?'; ?&gt; &lt;input class="someclass" name="desc" id="descID" type="text" value="&lt;?= htmlspecialchars($t);?&gt;" /&gt; 工作喜欢魅力!!
  • 这些 foobar 周围的双引号是这样插入到您的数据库中的吗?如果是这样,请在显示字符串之前转义它们。
  • 好的,所以我测试了这些,@Parixit 的解决方案似乎有效,但只有当我实际输入 &lt;?php $t = 'Did you hear about "foobar"?'; ?&gt; 时。我试过&lt;?php $t = $result['desc']; ?&gt; 没用
  • @EddeAlmeida 我的数据库按字面意思将文本保存为您是否听说过“foobar”。你的建议正是我在这里想要做的。

标签: php html sql-server htmlspecialchars


【解决方案1】:

到目前为止,感谢您的帮助,但我设法找到了解决方案:

<?$descEscaped = str_replace('"', '&quot;', $result['desc']);?>

<input class="someclass" name="desc" id="descID" type="text" value="<?= htmlspecialchars($descEscaped);?>" />

【讨论】:

    【解决方案2】:

    htmlspecialchars 用“&”替换引号。
    我正在使用我的简单函数 htmlliteral:

    function htmlliteral($s){
         return '"'.htmlspecialchars($s).'"';
    }
    

    有了这个功能,你可以使用:

    $descEscaped = htmlliteral($result['desc']);
    print "<input class=someclass name=desc id=descID type=text value=$descEscaped />";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多