【问题标题】:Sending special characters in HTML form以 HTML 格式发送特殊字符
【发布时间】:2011-09-12 07:42:52
【问题描述】:

我有一个格式名称为<myemail@host.com> 的输入字段(自动填写)。我给出了enctype="application/x-www-form-urlencoded" 的表单,但是当我在 PHP 中检索它时,它只显示名称。请也帮我找回邮件。

我的 HTML 表单:

<form action="{$path_site}{$index_file}" method="POST" enctype="application/x-www-form-urlencoded">
    <table>
        <tr>
            <td>Your Name</td>
            <td><input type="text" name="sender_name" size="37" /></td>
        </tr>
        <tr>
            <td>To</td>
            <td><input type="text" name="reciever_name" size="37" id="inputString" onkeyup="lookup(this.value)" onblur="fill()" /></td>
        </tr>
    </table>
</form>

还有PHP代码:

echo $msg_sender_name = $info[reciever_name];

【问题讨论】:

  • 你能显示你使用的代码吗?
  • 可以添加表单的 HTML 吗?
  • 你能把代码给我看一下,让我看看有什么问题吗?谢谢。
  • 哪个输入框不工作? PHP 代码是什么样的?
  • 啊啊啊!我应该认为您可能已将信息放在问题中,但是您在正确格式化问题时遇到了问题。顺便说一句 - 您的问题与您的程序遇到了同样的问题。 ;-) 干得好,asbjornu!

标签: php html forms enctype


【解决方案1】:

从 cmets 中提取信息,你说:

如果文本类似于“myName”,info['reciever_name'] 仅显示“myName”

我会说您的问题与显示结果有关,与表单无关。

您可能将接收到的字符串显示为 HTML,其中字符“”是特殊的

而不是

echo $info['reciever_name'];

你应该使用htmlspecialchars函数:

echo htmlspecialchars($info['reciever_name'], ENT_QUOTES);

这是 PHP (以及许多其他语言)中最常见的错误

您应该转义您正在显示的所有文本,尤其是当它来自不受信任的来源时 - 并且用户提供的每个值都是不受信任的.

如果无法转义输出,则会危及用户的安全 - 您可能想在 Wikipedia 上阅读有关 Cross-site-scripting 的信息。

【讨论】:

    【解决方案2】:

    以下PHP代码

    echo $msg_sender_name = $info[reciever_name];
    

    似乎缺少几个引号。试试这个:

    echo $msg_sender_name = $info['reciever_name'];
    

    【讨论】:

    • 即使没有引号也应该可以工作,除非碰巧有一个名为reciever_name的常量。
    • @Juhana:是的,但这是一种非常糟糕的编程习惯。 (我知道你知道这一点,但未来的读者可能需要通知)。我还记得这个功能计划在未来的语言版本中被删除。
    猜你喜欢
    • 2017-02-28
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多