如何在JavaScript

时间:2018-04-29 16:43:57

标签: javascript php whitespace trim removing-whitespace

我目前正在使用OOP PHP和模型 - 视图 - 控制器文件架构编写自己的内容管理系统。由于所述MVC系统,我需要动态地将给定帖子的内容呈现为定义的元素。我已经为此目的编写了一个脚本,它工作正常。当存在带有段落空格(在字符串内)的博客文本时,问题就会计入。这显然会引起问题,因为它正在积极地破坏例如字符串的形式。 ''这直接导致字符串不适合在浏览器中执行。我所说的是,如果字符串中有太多的空格(由于文本段落),标记会明显被破坏,因此它根本不会被渲染或应该被渲染。

除了这个考虑因素/猜想之外,我收到的错误信息是" Uncaught:Syntaxerror:无效或未检测到的令牌"毫无疑问,这与我上面的描述直接相关。当我在控制台中点击错误报告末尾的文件名时,我被重定向到一个完全空的页面,因此这不是有效的调试方式。

由于这是关于字符串操作的JavaScript和/或PHP机会的一般问题,因此我不需要提供任何代码片段。但是,无论如何,您可以查看我的Github以获取更多代码检查。

以下是该项目的链接:https://github.com/F9lke/basic-cms。请注意,评论和消息是在项目的当前状态下用德语撰写的。这将在未来发生变化。我正在谈论的脚本可以在模型/渲染目录的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";

现在又是我上面已经描述过的问题;如果有一个文章包含多个包含多个空格(例如段落)的文章,那么标记显然会停止执行,并且浏览器正在记录错误“#34;无效或未检测到的标记&#34;。” p>

这就是为什么我提出了如何削减这些空白区域的问题。希望你现在能更好地理解这个问题。

J0nny

1 个答案:

答案 0 :(得分:0)

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

  

这是必要的,但由于引号可能会导致重大问题。

一些注意事项

  • 就变量插值而言,HEREDOC的行为与"相似
  • NEWDOC就像'
  • 因为结尾标记必须单独位于,之前或之后没有空格或者它不起作用。

好的一些例子

  //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="

然后其余的会导致语法错误,除非我错过了你写的文本中的实际问题。

&#34;警告&#34;

  

如果有帖子......这会直接导致字符串无法在浏览器中正确执行。

如果网站用户可以保存任何内容,例如发帖,那么您打开网站最多XSS(跨站点脚本)恶意用户将Javascript插入帖子,然后被其他用户查看javascript会窃取会话cookie等内容并将其发送给前面提到的恶意用户。然后该用户可能会劫持不幸用户查看该帖子的任何登录会话(可能是您的网站以外的其他内容)。因此,请小心执行第三方提供的HTML。

Enyjoy。