Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果手工写出同一行代码效果很好,为什么粘贴一行会破坏代码?_Php_Copy Paste_Gedit - Fatal编程技术网

Php 如果手工写出同一行代码效果很好,为什么粘贴一行会破坏代码?

Php 如果手工写出同一行代码效果很好,为什么粘贴一行会破坏代码?,php,copy-paste,gedit,Php,Copy Paste,Gedit,以下是php文件中一行的两个版本: 第一版: if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) { if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) { 第二版: if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDon

以下是php文件中一行的两个版本:

第一版:

if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) {
if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) {
第二版:

if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) {
if ($projet['sourceDonnees'] === (string)$CONSTANTS['sourceDonnees_saisie']) {
尽管它们看起来相同,但第一个版本会导致
PHP解析错误:语法错误、意外的T_字符串
,而第二个版本工作正常。两者的不同之处在于,第一个版本是粘贴和修改的,而第二个版本完全是手写的。这是怎么回事


注意事项:该行是从UTF-8编码的文本文件复制而来,并粘贴到另一个UTF-8文本文件中。在gedit中完成的所有操作,这两个文件都是我在gedit中编写的。

您已经复制了UTF-8引号,这是PHP无法解析的。删除引号并将其替换为ASCII等效项(即通过键入引号)


有关ASCII与UTF-8引号的更多信息,请参见“

意外的T_字符串”
通常是引号或记号的问题。您复制的代码中的
s是UTF-8,可能是PHP无法解析的引号版本,比如我们在这里用于内联代码的反勾号。尝试将它们改为常规的单一报价,这可能会解决您的问题


如果不是这样,请确保没有遗漏函数末尾的分号。这可能会导致相同的错误。

当我将您的第一行复制并粘贴到我的文本编辑器中,并打开“显示不可见字符”选项时,看起来是这样的:

if ($projet['sourceDonnees']•=== (string)$CONSTANTS['sourceDonnees_saisie']) {

注意
]
=
之间的

您的第二行代码显示得非常干净

很多时候,当你从网站复制粘贴文本时,你会发现一些不可见的字符。然而,我不知道什么样的键盘组合会从头开始重现这种情况


进一步的实验表明,这个不可见的字符是“非ASCII”。。。文本编辑器简单地称它们为“小精灵”,甚至还有一个“zap gremlins”功能。

如果你的编辑器有显示符号的选项,试着打开它,看看它是否有助于显示一些信息。我使用BBEdit,它允许我打开选项来查看不可见的字符。通常,我在网上找到并从浏览器复制的代码完全被看不见的垃圾破坏了。如果您的编辑器不够高级,无法显示散乱的字符,最好重新键入您在网上找到的代码。在您的代码中,BBEdit在
]
==
之间向我显示一个不可见的字符,就像这样
]•==
。用空格重新键入。@Sparky通常如何键入该字符?可能是我无意中在原始字符串中键入的…我不认为是键入的。我认为当原作者将其发布到他的博客或网页时,空格和标签会以某种方式被转换。然后你不小心用一个简单的剪切粘贴把它们捡起来。您的第二行代码非常干净。原始作者是我自己,原始文件是使用gedit操作的文本文件(没有博客或网页)。。。这就是为什么我对这个问题的发生如此困惑!真正地这两行代码都是我在同一个文本编辑器中使用相同的引号写的……我无法告诉您这会发生在您的文件上,但我可以保证引号已经转换为它们的unicode等价物(之前我曾多次使用引号,通常是从博客复制)。如果您真的想深入了解十六进制代码,可以使用
xxd
检查十六进制代码。。。