2013-07-26 73 views
-3

下面的代碼給我的錯誤。PHP語法錯誤,意外'「,希望T_STRING或T_VARIABLE或T_NUM_STRING

<?php 
echo "<a href='prefs.php?username=$PHP_USER'>$lang_menu["prefs"]</a>"; 
?> 

我敢肯定它是與我的請求2個PHP變量,沒有。知道如何解決

+0

'echo「{$lang_menu["prefs"]}」;' – 2013-07-26 11:12:12

+2

我看到太多這樣的問題。花時間學習如何[解釋錯誤並修復代碼](http://jason.pureconcepts.net/2013/05/fixing-php-errors/)。 –

回答

1

顯然,你不能在雙引號字符串寫入轉義雙引號。我建議不要將未轉義的文本寫入HTML和URL。試試這個:

<?php 
echo '<a href="prefs.php?username=' . rawurlencode($PHP_USER) . '">' . htmlspecialchars($lang_menu["prefs"]) . '</a>'; 
?> 

編輯:一對夫婦澄清......

  1. 這些都是有效的字符串:

    $foo = "Hello, World!"; 
    $foo = "Hello, 'World!'"; 
    $foo = "Hello, \"World!\""; 
    

    這是

    $foo = "Hello, "World!""; 
    
  2. 正如這個詞所暗示的,SQL注入是指稱爲SQL的數據庫查詢語言。此代碼不包含SQL,它不與任何數據庫進行交互。

所以這是一無所知點或SQL注入。它是關於某些在特定語義環境中具有特殊含義的字符。這是關於text within text

+0

所以我只是基本錯過了點?我假設使用額外的函數來防止SQL注入? – ScepT1c

+0

@ ScepT1c - 查看我的編輯。 –

+0

那你爲什麼要用rawurlencode和htmlspecialchar呢? nvm只是閱讀開發人員文檔。感謝您的回答。 – ScepT1c

1

$variables分裂引號"

echo "<a href='prefs.php?username=".$PHP_USER."'>".$lang_menu['prefs']."</a>"; 
3

更換
<?php 

echo "<a href='prefs.php?username=".$PHP_USER."'>".$lang_menu['prefs']."</a>"; 

?> 
+1

如果您使用單引號來包含字符串,您仍然可以對html屬性使用雙引號。 – SmokeyPHP

+0

我不明白爲什麼我們應該堅持在html屬性上使用雙引號。這不會影響我所知道的代碼。 –

+2

不,但它是相當標準的 - 再加上當您使用雙引號時PHP會查找變量並分析哪些是不必要的(儘管非常小)開銷。我的觀點基本上是,爲什麼從標準的雙引號改爲當沒有需要時 – SmokeyPHP

1

使用此:

<?php 
echo "<a href=\"prefs.php?username=".$PHP_USER."\" >".$lang_menu["prefs"]."</a>"; 
?> 
1

試試這個

<?php 
echo "<a href='prefs.php?username=".$PHP_USER."'>".$lang_menu['prefs']."</a>"; 
?> 
相關問題