如何在 JavaScript 中剪切字符串的段落空格

How to cut paragraph white spaces of a string in JavaScript

我目前正在使用 OOP PHP 和模型-视图-控制器文件架构编写自己的内容管理系统。由于上述 MVC 系统,我需要将给定 post 的内容动态呈现到定义的元素中。我已经为此目的编写了一个脚本,并且运行良好。当博客文本中有段落空白(在字符串中)时,问题就出现了。这显然会导致问题,因为它正在积极破坏例如字符串形式。 '' 这直接导致字符串无法在浏览器中正确执行。我的意思是,如果字符串中有太多空格(由于一段文本),标记显然会被破坏,因此它根本不会呈现或应该呈现。

除此 consideration/conjecture 之外,我还收到了 "Uncaught: Syntaxerror: Invalid or unexptected token" 的错误消息,这无疑与我上面的描述直接相关。当我在控制台中单击错误报告末尾的文件名时,我被重定向到一个完全空白的页面,因此这不是有效的调试方式。

由于这是涉及字符串操作的 JavaScript and/or PHP 机会的一般性问题,因此我不需要提供任何代码片段。但是,您仍然可以查看我的 Github 以进一步检查代码。

这里是 link 项目:https://github.com/F9lke/basic-cms。请注意,在项目的当前状态下,评论和消息是用德语写的。这在未来肯定会改变。我说的脚本可以在model/render目录下的renderOutput.class.php中找到。

您知道这个问题的解决方案吗?或者您是否遇到过类似情况?请告诉我,祝你有个愉快的一天!

提前致谢,J0nny

** 编辑 **

我想我已经很好地解释了这个问题,但我会尝试更具体一些。我在上面的广泛描述中的意思是,文本的段落空白显然打破了引号。如果您查看我通过为您提供项目 GitHub 提供的脚本,您会注意到我通过 php 变量将文本提供给 JavaScript 变量。这是必要的,但可能会由于引号而导致重大问题。在这种状态下我是这样写的:

echo "targetClass.innerHTML = '$text' + targetClass.innerHTML;\n";

如果以不同的方式完成,可能会出现问题,因为引号与包含的标记不匹配。为了理解这一点,您必须考虑到此方法呈现的实际标记,如下例所示:

echo "targetClass.innerHTML = '<div class="exampleClass">foo</div>' + targetClass.innerHTML;\n";

现在又出现了我上面已经描述的问题;如果创建的 post 文本包含多个空格(例如 = 段落),则标记显然停止执行并且浏览器记录错误 "Invalid or unexptected Token".

这就是为什么我想出如何切割这些空白的问题。希望您现在可以更好地理解这个问题。

J0nny

对于带引号的字符串,您可以使用鲜为人知的 HEREDOC 和 NEWDOC,

This is neccessary, but can cause significant issues due to the quotes.

几点注意事项

  • 就变量插值而言,HEREDOC 的行为类似于 "
  • NEWDOC 的行为类似于 '
  • 因为两个结束标记都必须单独在 行上,前后没有 space 否则它将不起作用。

好的,举几个例子

  //heredoc
echo <<<HTML
targetClass.innerHTML = '<div class="exampleClass">foo</div>' + targetClass.innerHTML;

HTML;

 //newdoc
echo <<<'HTML'
targetClass.innerHTML = '<div class="exampleClass">foo</div>' + targetClass.innerHTML;

HTML;

标签 HTML 可以是您不想要的任何内容。那么我说的关于变量插值有什么区别,但我会告诉你。

$foo = "hello world";
//heredoc
echo <<<TAG
    $foo
TAG;
//newdoc
echo <<<'TAG'
    $foo
TAG;

输出

 //heredoc
  hello world
 //newdoc
  $foo

哦,如果好处不明显,那么您不再需要在 PHP 中为字符串使用引号,因此您可以自由使用 '" 没有转义 PHP.

另一种选择是像正常人一样逃离他们,但那很无聊...

echo "targetClass.innerHTML = '<div class=\"exampleClass\">foo</div>' + targetClass.innerHTML;\n";

看到没有\ PHP以为是这个字符串:

 echo "targetClass.innerHTML = '<div class="

然后剩下的会导致语法错误,除非我错过了你写的那面墙内的实际问题。

"caution"的一个词

If there is a post ... which directly leads to the string not getting executed in the browser appropriately.

如果站点用户可以将任何内容保存到此,例如制作 post,那么您将打开您的站点以进行 XSS(跨站点脚本),恶意用户将在其中插入 Javascript a post,然后当其他用户查看时 javascript 会窃取会话 cookie 之类的东西,并将它们发送给前面提到的恶意用户。然后该用户可能会劫持不幸的用户拥有的任何登录会话,这些用户查看了 post 拥有的(这可能是您网站以外的东西)。因此,是的,请小心执行第 3 方提供的 HTML。

尽情享受吧。