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 表单上的斜线被 \/ 替换的主要内容,如果未能解决你的问题,请参考以下文章
如何通过按 Enter 使用 Dojo 和 XHR 发送 Zend 表单
如何在 zend dojo 表单中添加 javascript 函数?
如何将 Zend_Dojo 表单元素动态添加到 zend_form?