2012-11-03 151 views
0

我從出現到被編碼的htmlspecialchars()兩次XML文件來的字符串:去除特殊字符編碼

$data = "string,s example"; 

我試着只是一個amphersand更換&,然後調用htmlspecialchars_decode(),然後用「and」替換簡單的amphersands,但輸出結果如stringand#44; example。 我想知道是否有一種方法來正確轉換這些字符編碼,或者正則表達式來完全去除它們(因爲我可以簡單地剝離它們並將它用作稍後檢查的值)?

+0

它的編碼d兩次,這看起來很不尋常。你是從純文本中得到的,還是已經解析過的XML編碼? – Bergi

回答

3

這個特殊的字符串needs to be processed twicehtml_entity_decode得到它的「真實」值(這些電話的第一個也可以是htmlspecialchars_decode)。第一階段將把&轉換爲&,第二階段將把實體,轉換爲相應的字符。

您應該小心地將所有相關參數傳遞給解碼函數調用(默認值在所有情況下都沒有意義),並且當然要確保所有傳入數據都以這種方式進行編碼,以便您不要錯誤輸出。

0

使用html_entity_decode如下:

$data = html_entity_decode (html_entity_decode ($data)); 
0

雖然如預期在本機PHP幾乎可以肯定的作品,接受的解決方案出現時應用到正在從Laravel控制器輸送到其觀點字符串什麼也不做。例如,要轉儲一個變量,我發現唯一有效的方法是提供e返回的值。例如,通過with方法print_r ($_ENV , true),並將封閉的pre標籤放入視圖中。

控制器:

$sDebugMessages = '$_ENV = '. print_r ($_ENV , true) ; 
return view ('Info')->with ('sPageTitle' , 'What is My Praesidium Central Hub?')->with ('sDebugMessages' , $sDebugMessages) ; 

查看:

pre>{{ $sDebugMessages }}</pre> 

結果(刪節,其原因應該是ovvious:

$_ENV = Array 
(
    [APP_ENV] => local 
    [APP_KEY] => xxxxxxxxxxxxxxx 
    [APP_DEBUG] => true 
    [APP_LOG_LEVEL] => debug 
    [APP_URL] => https://localhost 
    [DB_CONNECTION] => mysql 
    [DB_HOST] => localhost:3306 
    [DB_DATABASE] => xxxxxxxxxxxxxxx 
    [DB_USERNAME] => xxxxxxxxxxxxxxx 
    [DB_PASSWORD] => xxxxxxxxxxxxxxx 
    [BROADCAST_DRIVER] => log 
    [CACHE_DRIVER] => file 
    [SESSION_DRIVER] => database 
    [QUEUE_DRIVER] => sync 
    [MAIL_DRIVER] => smtp 
    [MAIL_HOST] => xxxxxxxxxxxxxxx 
    [MAIL_PORT] => 587 
    [MAIL_ENCRYPTION] => tls 
    [MAIL_USERNAME] => xxxxxxxxxxxxxxx 
    [MAIL_PASSWORD] => xxxxxxxxxxxxxxx 
    [MAIL_FROM_ADDRESS] => xxxxxxxxxxxxxxx 
    [MAIL_FROM_NAME] => xxxxxxxxxxxxxxx 
    [MAIL_MODE] => xxxxxxxxxxxxxxx 
    [MAIL_MODE_EMAIL] => xxxxxxxxxxxxxxx 
)