PHP 整洁和文本区域

Posted

技术标签:

【中文标题】PHP 整洁和文本区域【英文标题】:Php tidy and text areas 【发布时间】:2011-11-30 09:36:29 【问题描述】:

我正在使用tidy 清理和格式化由twig template engine 生成的html 输出。

为了整洁,我使用如下配置:

$config = array('indent' => TRUE, 'output-html' => TRUE, 'wrap' => 0);

一切都很好,除了当我们到达 textareas 时。

这是未清理的片段:

<textarea id="words"
         rows="10"       cols="50"                  >sdfds</textarea>

虽然格式很乱,但在文本区域中输出了正确的值:'sdfds',前后没有任何空格。

这是使用 tidy 后清理后的格式:

                <textarea id="words" name="words" rows="10" cols="50" title="prompt">
sdfds
</textarea>

可以看出,标记现在整洁了很多,但是 tidy 在 'sdfds' 之后引入了换行符,这意味着在浏览器中查看时,光标现在指向 'sdfds' 之后的行。

这很烦人,我不知道该如何处理。我仍然希望清理 textarea 标记,但我希望它的格式如下:

<textarea id="words" name="words" rows="10" cols="50" title="prompt">sdfds</textarea>

以前有人处理过这个问题吗?如果是这样,我怎样才能整洁不为 textarea 标签引入这些空格?

【问题讨论】:

【参考方案1】:

如果使用 php 输出 sdfds,则需要添加另一个配置选项。

 $config = array('indent' => TRUE, 'output-html' => TRUE, 'wrap' => 0, 'wrap-php' => 0);

Wrap 只关心 html 并且任何 php 语句都被视为一个新行。有关配置选项的更多信息,您可以访问:http://tidy.sourceforge.net/docs/quickref.html

【讨论】:

很遗憾 sdfds 不是由 php 生成的。 HTML 由 twig 生成为字符串。 Twig 添加 php 代码来回显来自文件或数据库的数据。添加 wrap-php,如果不起作用,请将 0 替换为 false。 我已经尝试将 0 和 False 用于 wrap-php 参数,但我仍然得到相同的结果。这可能是由于使用block()从另一个树枝模板文件中提取的文本区域。【参考方案2】:

当你使用 indent => true 你会弄乱 texareas 和 tidy。它变得整洁,因为即使是 textareas 值也是缩进的。如果您希望您的文本区域显示正确,您可以设置 indent => false。这将整理您的 HTML,但在应用 tidy 后也会使您的 textarea 具有相同的值。我已经看到有一些补丁可以解决这个问题,但是你应该自己编译。你也可以用 PHP 来做这件事,但是你正在整理整齐。

【讨论】:

我仍然看到与indent =&gt; false 相同的问题。我也尝试将output-html 设置为truefalse,但我仍然看到同样的问题。 @phpdev 这适用于 html 输出,其中 tidy 将在 textarea 的确切值之前添加一个换行符。这可以通过使用 output-xml => true 而不是 output-html => true 来解决。 谢谢丹尼斯。这似乎已经解决了问题,但它又引入了另一个问题!由于 output-xml 添加了一个结束标记,&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt; 现在是 &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;,这现在无法验证为 HTML 4.01 Strict:using XHTML-style self-closing tags (such as &lt;meta ... /&gt;) in HTML 4.01 or earlier. To fix, remove the extra slash ('/') character. For more information about the reasons for this, see Empty elements in SGML, HTML, XML, and XHTML.【参考方案3】:

Tidy 有时可能会变得“凌乱”,需要使用 rexep 进一步完善,这是一种解决方法,可以将光标放在最终输出中的同一行,因此可用性不会受到影响。只需运行整理好的 html 槽:

$subject = preg_replace('%(\r\n|\n)(?=</textarea>)%sim', '', $subject);

【讨论】:

【参考方案4】:

只需对文本区域使用修剪功能。你会得到你正在寻找的东西

【讨论】:

以上是关于PHP 整洁和文本区域的主要内容,如果未能解决你的问题,请参考以下文章

输入文本框和文本区域自动清除

如何将HTML中下拉菜单和文本区域的值传递到java中的

form.serialize() 用于输入字段和文本区域

如何使用 AngularJs 从输入或文本区域中删除特殊字符?

验证输入框和文本区域

xd区域文本在哪