簡體   English   中英

Sublime Text / code解析錯誤無理由,隱藏字符

[英]Sublime Text / code parse error for no reason, hidden characters

多年來我一直有這個問題,但不像今天這么頻繁。 這促使我一勞永逸地提出這個問題。

有時候(今天幾乎每一個邏輯),我的瑣碎PHP代碼都會因解析錯誤而失敗。 有時PHP是正確的,但通常沒有錯誤,並且當再次編寫完全相同的代碼時,它可以毫無怨恨地工作。 復制和粘貼代碼不起作用,必須再次完整輸入。

今天,我仔細地輸入了每個字符,就像線路故障一樣,然后刪除舊的字符,只是讓腳本工作。 例如:

1    foreach ($_POST['data_positions'] AS $k => $v) {
2    
3    }

在第1行引發了一個解析錯誤。我把代碼碰到了第2行並再次寫了完全相同的第1行(我多次檢查每個字符是否相同),然后刪除第2行,它就可以工作了。 另一個例子:

1    if (is_numeric($k)) {
2    
3    }

在第1行也失敗了。當我重新鍵入它時,它可以工作。 再次復制和粘貼該行不起作用。

我100%肯定代碼很好,所以它讓我相信它是某種編碼問題,並且代碼的某些部分歸因於錯誤的編碼(比如將格式化文本粘貼到電子郵件中)。

我目前正在使用Sublime Text(但在Notepad ++和舊的Homesite編輯器中也有相同類型的錯誤解析錯誤),在OS X上運行MAMP,但它也發生在我的Windows桌面計算機上。

有誰知道我能做什么? 編寫代碼幾次並讓它隨機失敗是非常煩人的。

編輯(重新開放):我仍然無法讓它正常工作。 無論我是將它粘貼到記事本還是從頭開始鍵入一個全新的文件。 我已經通過數據庫檢查了服務器到我的編輯器,他們都使用UFT-8。 它幾乎總是IF語句中斷(有時我必須在它工作之前鍵入它們3到4次。瑣碎的東西,比如if ($a === 3 || $a === 6) {}

編輯(解決了!):向下滾動查找解決方案,我自己回答了問題。

我終於找到了答案。 我必須通過反復試驗找出我做錯了什么。

因此,如果您的代碼因隱藏字符而中斷,如果您在從UTF-8切換到ISO-8859-1時發現該字符是“”,那么它主要發生在OSX和多個編輯器中(包括Sublime Text和Coda對我來說)這可能是原因:

在許多操作系統中,當您按alt+space時,您將獲得正常空間的不間斷空間instad。 解析該字符時,許多編程解析器(例如PHP,Xcode)將失敗。

要在Sublime Text中修復它,您需要編輯Preferences / Key綁定 - User並添加以下行:

{ "keys": ["alt+space"], "command": "insert_snippet", "args": {"contents": " " } },

請記住,鍵綁定文件是一個包含對象的數組,如果有更多條目,需要保留最后一個。 如果它是最后一個刪除它。

如果你需要在任何其他編輯器中修復它,只需谷歌“ yourEditor disable alt space ”。

編輯:

我還注意到alt+shift+space的相同行為,因此我在keybinding配置中添加了另一行:

{ "keys": ["alt+shift+space"], "command": "insert_snippet", "args": {"contents": " " } },

:)

你在不知不覺中粘貼導致此解析錯誤的隱藏字符。 可能是您復制的代碼源,包括剪貼板中的這些隱藏字符。 也許你應該使用notepad本來剝離這些隱藏的角色:

  1. 從源代碼復制代碼
  2. 將其粘貼在記事本中
  3. 從記事本復制
  4. 粘貼在您選擇的代碼編輯器中

當您使用sublime文本時, 可能會有所幫助

我意識到您已經接受了自己的答案,但為了將來參考,我不建議將您的代碼保存在編碼為UTF-8的文件中。

在編寫PHP或任何其他代碼時,我只會使用普通的舊ASCII。 使用任何其他編碼可能會導致意外情況發生 - 正如您已經發現的那樣。

即使您的代碼生成的輸出是您要編碼為UTF-8的網頁,也請使用ASCII作為代碼文件。 代碼文件的編碼和這些代碼文件生成的頁面編碼是兩回事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM