Zend Dojo 表单上的斜线被 \/ 替换

Posted

技术标签:

【中文标题】Zend Dojo 表单上的斜线被 \\/ 替换【英文标题】:slashes being replaced by \/ on a Zend Dojo FormZend Dojo 表单上的斜线被 \/ 替换 【发布时间】:2011-07-14 22:29:44 【问题描述】:

我正在这样做: http://zend-framework-community.634137.n4.nabble.com/How-to-Zend-Dojo-Form-Dependent-Selects-e-g-Country-City-td663650.html

如果我这样做:

$this->view->form->getElement('subtipo')->setStoreParams(array('url'
=> 'http://localhost/~xpete/project/public/info/lookup/tipo/1'));

我在生成的 html/js 上得到这个结果:

subtipo_id = new dojo.data.ItemFileReadStore("url":"http:\/\/localhost\/~xpete\/project\/public\/info\/lookup\/tipo\/1"); 

\ 已替换为 \/。 有什么办法可以避免这种情况吗?这是 Zend 的 bug 吗?

我在 Zend FW 1.11.7 1.11.8 和 1.11.9 预览版中进行了尝试。 我尝试打开和关闭魔术引号,结果是一样的。 我使用的是 php 5.3.7,所以默认情况下禁用魔术引号。

setStoreParams 是 Zend 框架中的一个方法,这就是为什么我认为这可能是一个错误。

【问题讨论】:

【参考方案1】:

这里有一些链接描述了您在 PHP 中看到的一些行为:

http://www.php.net/manual/en/function.json-encode.php#100679https://bugs.php.net/bug.php?id=49366

结果是为 PHP 5.4(目前处于 alpha 版本)创建了一个标志,以便能够不转义斜杠。我还没有看到这是否被向后移植到 5.3 分支。

由于今天是 ZendFramework 1 的(希望是)最终版本,您可以根据需要修改 Zend_Json::encode 方法。让它查找以 'http://' 开头的字符串并去掉斜线。

【讨论】:

【参考方案2】:

这不是错误。通常的做法是转义双引号中的正斜杠 / 以避免 javascript 错误。当Javascript把这个写成字符串的时候,只会写http://localhost/~xpete/project/public/info/lookup/tipo/1

【讨论】:

Javascript 有一些奇怪的特性,但肯定没有什么比将字符串中的正斜杠解释为除法更奇怪的了。双引号字符串中唯一重要的元字符是反斜杠和双引号。 我更新了我的帖子,但我不记得我在哪里看到的。只是一直处于这种假设之下。无论哪种方式 document.write("1/0") 都与 document.write("1\/0");【参考方案3】:

您必须使用str_replace("/","",your_string) 替换用户界面中的“/”文本。

【讨论】:

以上是关于Zend Dojo 表单上的斜线被 \/ 替换的主要内容,如果未能解决你的问题,请参考以下文章

Zend_Dojo 表单密码文本框验证不起作用

如何通过按 Enter 使用 Dojo 和 XHR 发送 Zend 表单

如何在 zend dojo 表单中添加 javascript 函数?

如何将 Zend_Dojo 表单元素动态添加到 zend_form?

在 Zend Framework 中按需启用对表单的 Dojo 支持

Zend Framework 1 和最新的 Dojo 版本