繁体   English   中英

PHP Strange Whitespace是在编写文件时创建的。 (阻止CSS)

[英]PHP Strange Whitespace is created while writing files. (blocks CSS)

我正在尝试通过PHP将代码保存到* .php文件中,以便稍后在iframe中运行它。

问题:

由于某种原因CSS无法正常工作(HTML + JS可以正常工作!),在进行了一些实验之后,我注意到文件中的空格并没有真正破坏CSS代码(用常规键盘空格代替它们可以解决问题),因此我试图找到区别,但它们的unicode相同(UTF-8:20)。 甚至严格的PHP运算符(===)都说它们相同,并且'ord()'都返回32。 据我所知,它是在写入文件时创建的。

示例: > JSFiddle <

HTML:

<!--head--><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<input type="text" name="name" />
<textarea name="HTML" [...] spellcheck="false">[HTML in the JSFiddle]</textarea>
<textarea name="CSS" [...] spellcheck="false">[CSS in the JSFiddle]</textarea>
<textarea name="JS" [...] spellcheck="false">[JS in the JSFiddle]</textarea>

PHP:

//mb_internal_encoding() ---> "UTF-8"
$php = fopen($myPath.'/'.$_POST['name'].'.php', 'w');
fwrite($php, '<html><head><style type="text/css">'.$_POST['CSS'].'</style><script type="text/javascript">'.$_POST['JS'].'</script></head><body style="margin: 0;">'.$_POST['HTML'].'</body></html>');
//adding "\xEF\xBB\xBF" doesn't help (all files are in UTF-8)
fclose($php);

问题:

  • 为什么这些空间不同?
  • 我该如何解决?
  • 是否有人用正则表达式用普通空格替换空白(/ \\ s + / g会生成很多“”和空格)?

更新1:

所有数据均采用UTF-8:

echo mb_detect_encoding($_POST['HTML'], 'UTF-8, ASCII', true); //UTF-8
echo mb_detect_encoding($_POST['CSS'], 'UTF-8, ASCII', true); //UTF-8
echo mb_detect_encoding($_POST['JS'], 'UTF-8, ASCII', true); //UTF-8

谢谢! -介意

空格部分的正则表达式: $str = preg_replace('/[\\s\\pZ]+/u', ' ', $str); -\\ s是Posix空格,\\ pZ是Unicode空格,修饰符/ u是让PCRE理解UTF-8。

它起作用的事实意味着实际数据必须包含其他一些空格。 也许是臭名昭著的NBSP(Unicode U + 00A0,UTF-8 0xc8a0)。 但是需要查看原始数据的十六进制转储-而不是JSFiddle代码段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM