2017-03-15 70 views
0

所以我有這樣的代碼:Filter_var()被添加了 「A」 符號 「©」 符號

var_dump(trim(filter_var("\nLook ma, there are special characters:\n<>\"'&©", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH))); 

將輸出這樣的:

string(66) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&&#194;&#169;" 

的問題是,enocoded字符&#194;是字符Â,它不在原始文本中。

我的問題:爲什麼會發生這種情況,以及如何刪除多餘的Â字符?

+0

什麼是你正在試圖解決的實際問題?你的目標是什麼? –

+1

不確定它的錘子值得,但這是高度相關http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – Machavity

回答

1

這不是一個額外的字符;它是多字節Unicode字符的第一個字節。

實際上,您通過爲其提供FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH標誌表達式來要求函數執行此操作。

如果你不編碼「高」的價值觀,其結果的變化,但仍然不是非常有用:

var_dump(trim(filter_var("\nLook ma, there are special characters:\n<>\"'&©", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW))); 
// string(61) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&┬®" 

下一步做什麼取決於你的需求。我懷疑filter_var不是你要找的,如果你想處理Unicode字符。

如果ANSI足夠你,我發現,速戰速決是我的PHP源文件的編碼更改爲ANSI模式( UTF-8!),通過去除固定現已打破「©」字形孤立的「A」,並再次運行該腳本:

// string(65) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&&#169;" 

但是,這是一種限制。

必須通過以下手冊頁讀的詳細資料:

+0

那麼,這絕對解釋了爲什麼(+1),我仍然需要知道如何刪除角色。我會猜測'mb_convert_encoding()'會修正它,但是我不太瞭解字符編碼知道將其轉換爲。 (如果有幫助,我編輯UTF-8模式的文件) –

+0

我們需要具體瞭解你的目標是什麼,具體來說你的要求是什麼。你想用哪些字符做什麼?爲什麼? –

+0

ascii範圍對我來說已經足夠了,我不需要支持用戶輸入該範圍以外的字符。 (但是,我確實需要在源代碼中支持UTF-8) –