【问题标题】:How to handle special character "&" between MySQL, HTML and PHP [duplicate]如何处理 MySQL、HTML 和 PHP 之间的特殊字符“&”[重复]
【发布时间】:2012-09-02 12:23:05
【问题描述】:

可能重复:
PHP: Convert special characters to HTML character codes

我在 DB 中有一个字符串列,它可以有特殊字符“&”。

此列值用于以下选项:

<select onChange="display()">
echo "<option value='".$products."' </option>";

添加: 在此之后生成的 HTML 是正确的:

<option value="{"varId":"2 & 4 wheel","month":"June"}"> two and four wheel </option>

并将其发送到 PHP 脚本。如果 $products 的值是“2 & 4 wheel”,那么在 PHP 中我得到的只是“2”并且我的查询失败了。

我知道这是因为 HTML 不能处理特殊字符,但是如何解决这个问题。

【问题讨论】:

  • 查看我关于您的更新的更新。

标签: php html special-characters


【解决方案1】:

HTML 可以处理“特殊字符”。每种语言都有自己的“特殊字符”,每种语言都有自己的处理规则。 HTML 具有用于此目的的 HTML 实体。在将 any 任意值回显到 HTML 之前,始终使用htmlspecialchars 对它们进行 HTML 实体编码。

有关该主题的更深入信息,请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)


关于您的更新:

<option value="{"varId":"2 & 4 wheel","month":"June"}"> two and four wheel </option>

这绝不是正确的 HTML。 value 包含 ",而 " 包围 value="..." 属性以及哪些是值的一部分是完全不明确的。它需要看起来像这样:

<option value="{&quot;varId&quot;:&quot;2 &amp; 4 wheel&quot;,&quot;month&quot;:&quot;June&quot;}"> two and four wheel </option>

看看这里语法高亮的区别。你会得到这个:

$value = '{"varId":"2 & 4 wheel","month":"June"}';
echo '<option value="' . htmlspecialchars($value); .'"> two and four wheel </option>';

【讨论】:

    【解决方案2】:

    使用htmlentities 对字符串进行编码。

    echo "<option value='". htmlentities($products) ."' </option>";
    

    【讨论】:

    • 我在 HTML 中得到了正确的值。当我得到不正确的值时,它同时从 HTML 发送到 PHP。我也尝试了 htmlentities() ,但我仍然面临这个问题。
    【解决方案3】:

    &amp;amp; 存储在您的数据库中是一种方法。使用str_replace('&amp;', '&amp;amp;', $str) 转换它或仅使用htmlentities() 之类的东西

    【讨论】:

      【解决方案4】:

      您可以使用 htmlentities (http://php.net/manual/en/function.htmlentities.php) 在输出字符串之前对其进行编码。

      例子:

      $products = htmlentities($products);
      echo "<option value='".$products."' </option>";
      

      echo "<option value='". htmlentities($products) ."' </option>";
      

      【讨论】:

      • 我在 HTML 中得到了正确的值。当我得到不正确的值时,它同时从 HTML 发送到 PHP。我也尝试了 htmlentities() ,但我仍然面临这个问题。
      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2018-09-24
      • 2011-09-19
      相关资源
      最近更新 更多