【问题标题】:jQuery code not passing special characters properlyjQuery代码没有正确传递特殊字符
【发布时间】:2011-06-24 06:32:25
【问题描述】:

我有一个使用 jQuery jEditable 插件(通过 AJAX 进行内联编辑)的站点。问题是,如果您输入诸如“Entrées”之类的内容(这是用于编辑餐厅菜单,因此应该输入这样的输入),获取该值的 AJAX PHP 脚本会收到“Entrées”。如何确保发送的值正确发送?

更诡异的是,数据库值存储为“Entrées”,但在网页上显示时,却正确显示“Entrées”。

【问题讨论】:

    标签: php javascript jquery ajax jeditable


    【解决方案1】:

    确保输入文本的表单和显示文本的页面都使用 UTF8 编码。如果您的“测试”以查看收到的内容是简单的echo ...; exit;,则该页面可能未呈现为 UTF8。

    【讨论】:

    • 我在标题中有<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />。这足够了吗?我是否也应该使用 PHP 来设置标题的字符集? (顺便说一句,我让 AJAX 脚本将接收到的原始输入直接输出到 .txt 文件中,它仍然显示“Entrées”。)
    • 从服务器发送的标头通常更好,即使文件包含不同的文件,某些浏览器也会使用它们。
    【解决方案2】:

    在发送之前,您必须在字符串上使用 javascript encodeURI() 函数。

    【讨论】:

    • 你碰巧知道如何在 jEditable 的上下文中做到这一点吗?文档有点粗制滥造和不完整。我必须在 cmets 中搜索比文档本身更有帮助的信息。 :P
    • 我想通了(只是编辑了源 JS 文件本身)。但是,现在收到的输入是“Entr%C3%A9e​​s”,与“Entrées”相同。 WTH 是怎么回事?>
    • 我只是想说:) 好的,现在在服务器端使用msdn.microsoft.com/en-us/library/6196h3wt.aspx
    • 使用 urldecode() (PHP) 只会产生“Entrées”,正如我在你上面的评论中提到的那样 (Entr%C3%A9e​​s = Entrées)。请看下面我的回答。使用 escape() 客户端(在发送用户输入之前)产生正确的值(Entr%E9es = Entrées),而 encodeURI() 没有。
    【解决方案3】:

    我想我可能已经解决了这个问题。使用 escape() 而不是 encodeURI() 可以正常工作。有人知道为什么会这样吗?

    escape() 返回:Entr%E9es

    encodeURI() 返回:Entr%C3%A9e​​s

    很奇怪。

    【讨论】:

    • 转义适用于 ascii 字符,但如果想要发送 ascii 范围之外的字符,您必须在服务器端使用 encodeURI 和 uridecode 。这与您的页面或代码无关,因为您的 ajax (get) 参数是作为 url 查询字符串发送的,并且有自己的规则。
    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2012-09-07
    • 2022-06-10
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多