2013-02-12 111 views
0

我有幾個字符串變量在我的PHP代碼,如下所示:addslashes的只有逃避簡單引號

"A piece of text with sometimes 'simple quotes' in it, and most important, 
some parts "between double quotes" inside the string itself, playing the role 
of quotations marks" 

不幸的是,我從一個數據庫這個數據,並且需要把它放在一個JSON字符串格式。當我遍歷由json_encode生成的JSON對象(我將數據作爲關聯數組與PDO進行編碼然後對其進行編碼)並對循環中的每個字符串使用addslashes時,只有簡單引號會被轉義。

(我知道這是不是良好的,但是這是我如何得到它從數據庫中...)

這一切最奇怪的是,在文檔中,我看到了雙引號都此功能可逃過一劫,所以我試圖把另一個在第一位置字符串中,以檢查它是否會被轉義:

$mystring = '"' . $mystring;

據逃出來的,我不知道別人爲什麼這在後來的字符串中沒有。

這是我目前的片段(不轉義雙引號):

$dbh = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE, DB_USER, DB_PASSWORD); 

$data = $dbh -> query("MY SELECT REQUEST"); 
$result = $data -> fetchAll(PDO::FETCH_ASSOC); 

$result_inter; 

foreach ($result as $key => $entry) { 
    foreach ($entry as $key2 => $entry_inter) { 
     $new_value = $entry_inter; 
     $new_value = strip_tags($new_value); 
     $new_value = addslashes($new_value); 
     $new_key[$key2] = $new_value; 
    } 
    $result_inter[$key] = $new_key; 
} 

$result = json_encode($result_inter); 
echo($result); 

如果任何人有一個關於如何解決這個線索,我會很感激。

+0

你可以發佈填充數組的代碼嗎? – hek2mgl 2013-02-12 16:28:54

+0

我通過使用'fetchAll(PDO :: FETCH_ASSOC);'從PDO中獲取數據來填充數組。 – 2013-02-12 16:32:21

+0

需要整個循環(可能簡化)..您可以將其添加到問題。我想我知道什麼是錯的,但需要代碼。 – hek2mgl 2013-02-12 16:33:49

回答

2

如果你想要把它放在JSON,與addslashes使用json_encode而不是任何巫術。

+0

我已經在使用json_encode了......由於剩下的雙引號導致JSON格式不正確。 – 2013-02-12 16:28:11

+0

@Selphira:'json_encode'的輸出不可能是格式良好的。你正在做其他事情,顯然有些事情是錯的。它是什麼? – Jon 2013-02-12 16:28:50

+0

我目前正在做一個簡單的循環,用'strip_tags'調用,爲了從一些屬性中刪除html標籤,因爲它們中的一些包含HTML內容,我認爲它可能會發生衝突,所以我正在做這些測試刪除無標籤字符串的雙引號。 你認爲這可能是真正的原因嗎? (我也刪除他們,因爲'回聲',HTML將被格式化,我覺得它煩人調試。) – 2013-02-12 16:35:32

0

你不需要惹strip_tagsaddslashes或任何其他功能周圍。如果你想用JSON編碼你的數組,只需使用json_encode即可。

如果您想要避開引號,您可能會錯過JSON_HEX_APOSJSON_HEX_QUOT等不同的可用選項。

例如:

$string = "'apo'"; 
echo json_encode($string , JSON_HEX_APOS); 

將輸出"\u0027apo\u0027"

我想這就是你要找的內容。