Qaflanti的答案是正確的,但我想m讓它更完整,如果你想逃避單引號和雙引號。
第一種選擇:
function escape_quotes($string) {
return preg_replace("/(^|[^\\\\])(\"|')/","$1\\\\$2", $string);
}
輸入
我愛\ 「carots \」,而是 「我」 不喜歡\ '櫻桃\'
輸出
我愛\ 「carots \」,但是\ 「I \」 唐\ '噸像\' 櫻桃\」
說明:
的\
有在引用的表達式中有特殊含義,並且會在字符串中轉義下面的字符,所以雖然您需要在正則表達式中編寫\\
以搜索反斜槓字符,但在PHP中,您還需要轉義這兩個反斜槓,總共4個反斜槓。
考慮到這一點
所以,第一個捕獲組,然後搜索單個字符不是反斜線(而不是兩個或四個反斜槓具有誤導性,因爲它是)
第二個捕獲組將搜索雙倍或單引號 恰好一次。
因此,這會找到未轉義的引號(雙精度和單精度)並在引號之前添加一個反斜槓,從而轉義它。
第二個選項:
或者,它可能只是對你最好將它們轉換爲HTML從一開始就實體:
function htmlentities_quotes($string) {
return str_replace(array('"', "'"), array(""", "'"), $string);
}
然後你只需要使用php函數htmlspecialchars_decode($string);
將其恢復爲原來的樣子。
輸入
我愛 「carots」,而是 「我」 不喜歡 '櫻桃'
輸出
我愛"
carots "
但"
I "
don '
像 '
櫻桃'
如果存在具有多於2個反斜線的可能性噸,可以考慮使用一個遞歸函數,並用'strpos檢查()'。 – Mave