我目前正在编写一个系统,用于发布有关基本 PHP 的教程。
但是,我目前正在编写一个表单来编辑一个教程,它位于数据库中。
现在,我要做的是,在我查看网站上的表单时使用 setDefaults。但是,textarea 没有显示教程。我在谷歌上搜索了一下,发现了这个问题,还在这里找到了一个答案,这似乎是一个非常相似的问题。
首先我需要告诉你这个 textarea 元素中将显示的值:
- 它是一个关于 PHP 的教程,其中包含特殊的字符,因为它包含 php 代码,可能包含一些 HTML 和一些 CSS,甚至可能是 Javascript。
它将包含 BBCode,因为我正在使用 bbcode 来设置我的教程的样式,例如 Zend 框架中的 BBCode 标记,以及我为语法高亮创建的附加 bbcode
将使用基于 jQuery 的名为 "Markitup" 的 Javascript 编辑器查看文本框。但是,编辑器被禁用以缩小问题,因此请忽略最后一部分,因为它只是 import:
代码 BBCode 将显示在此 textarea 元素中。
那么接下来是什么:
我在这里找到了问题的根源:
为什么 zend_form 不能使用带有变音符号的 Firebird db 记录填充输入?
它清楚地告诉我,Zend Framework 将逃避我的价值观,这一定是原因,我填充的表单中唯一的元素是带有代码的文本区域。
问题:
如何在不更改 Zend 框架中的原始文件的情况下获得纯文本区域元素中显示的教程?
我不想更改助手中的转义(值),以便我的表单正常工作。因为下一次更新将简单地覆盖所有内容。所以我需要在不更改原始文件的情况下这样做。
我期待与您讨论这个问题,希望有人能给我一个提示或解决这个问题。
根据 Zend 手册,默认转义方法是 htmlspecialchars,但您可以使用 setEscape 方法覆盖它。设置在Controller中试试看是否有效:
1
|
$this->view->setEscape('yourescapefunction');
|
但奇怪的是,"nothing" 出现了,因为 htmlspecialchars 仅在 ENT_IGNORE 作为标志提供且不是默认值时才返回空字符串。
- 谢谢vstm,我现在找到了一个讨厌的解决方案。我正在做的事情如下:创建一个具有转义函数的类,它只返回字符串。比我创建一个视图实例并将转义方法设置为我在我自己的类中创建的方法,如前所述。比我渲染表单并回显它。现在唯一的问题是,我在控制器中回显,我真的不喜欢这样!所以我希望,还有其他人可以帮助我解决这个问题。这是我在控制器中的操作方法:pastebin.com/AzRv8wzY
@Richard,感谢您的代码,现在我明白您的意思了。但是您不必创建新的视图对象,因为框架已经提供了一个。因此,您可以代替 $view->setEscape(array($escaperClass, 'escape')); 执行 $this->view->setEscape(array($escaperClass, 'escape')); ,然后删除 $view 变量。然后在 edit.phtml 你可以回显表单(我希望我的解释很清楚)。
惊人的。非常感谢vstm。你帮了我很多。 :) 谢谢。完美运行。