【问题标题】:PHP Parsing error results from string variable containing a drive pathPHP解析错误来自包含驱动器路径的字符串变量
【发布时间】:2011-06-16 14:21:52
【问题描述】:

我遇到了一个错误

解析错误:语法错误,意外的 T_STRING

在下面有$szSearchDBPath的行。似乎 PHP 不喜欢驱动器路径。

我花了几个小时在谷歌上搜索,试图找出问题所在,但没有成功。

据我了解,单引号字符串不会被解析,应该按字面意思解释。

有谁知道可能是什么问题?

<?php
$szHost = getcwd();
$szAddDir = "";
$g_bSaveSearch = 'True';
$szContentRoot = 'd:\websites\lycos\Alpha_Pourri\';
$szSearchDBPath = 'd:\websites\lycos\Alpha_Pourri\searches\';
$bPRODSite = 'False';
$i = 0;
...

【问题讨论】:

  • 单引号和反斜杠 do 需要在单引号字符串文字中进行转义。但是,没有其他字符可以(与双引号字符串文字相反)。这可能是吸引你的原因;见php.net/manual/en/…
  • @Jon:实际上你甚至不需要转义反斜杠 - 除非它可以被解释为转义反斜杠,即如果它后面跟着一个引号。 PS:您也可以在 Windows 上使用普通斜杠;)无需处理反斜杠

标签: php


【解决方案1】:

由于反斜杠用于转义字符,因此您会在结尾的单引号前添加反斜杠,从而意外地转义了结尾的单引号。试着把你所有的反斜杠变成双反斜杠,例如

$szContentRoot = 'd:\\websites\\lycos\\Alpha_Pourri\\';

【讨论】:

  • 丹,您的答案似乎比其他两个早一秒发布,所以我会将您的答案标记为解决方案。
【解决方案2】:

从技术上讲,反斜杠是 PHP 中的转义字符,因此您必须对它们进行双重转义:

<?php
$szHost = getcwd();
$szAddDir = "";
$g_bSaveSearch = 'True';
$szContentRoot = 'd:\\websites\\lycos\\Alpha_Pourri\\';
$szSearchDBPath = 'd:\\websites\\lycos\\Alpha_Pourri\\searches\\';
$bPRODSite = 'False';
$i = 0;

有关这方面的更多信息,您可以参考manual entry about strings

要指定文字单引号, 用反斜杠 () 转义它。到 指定文字反斜杠,将其加倍 (\)。 ...

【讨论】:

    【解决方案3】:
    $szContentRoot = 'd:\websites\lycos\Alpha_Pourri\';
    

    \ 转义了单引号',因此字符串不会在那里结束。转义反斜杠

    $szContentRoot = 'd:\websites\lycos\Alpha_Pourri\\';
    

    转义最后一个就足够了(因为它在单引号中)。但是,您可以将每个\ 替换为\\。或者您只使用常见的正斜杠/,因为 Windows 接受两者作为目录分隔符。

    【讨论】:

    • KingCrunch,感谢您提供解决此问题的其他选项...
    • King,另一个注意事项:我尝试了您的两个建议,它们都有效。但是,如果反斜杠在技术上是一个转义字符,那么在每个实例中使用双反斜杠可能更“安全”,而不是只在最后一个。但就像我说的,两者都对我有用。
    猜你喜欢
    • 2012-09-11
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多