2011-10-19 104 views
9

我試圖從文本中刪除撇號,它不是真的工作。這應該是小事。用Preg_Replace替換撇號的問題

$text = preg_replace('/\'/', '', $text); 

這就是我現在使用它來刪除它。我究竟做錯了什麼?

有一系列的這些刪除特殊字符將它們轉換爲網址並將它們存儲在我的數據庫中。然而,最近的一批出現了一個' '是的。

任何幫助,非常感謝。先謝謝你。

+4

爲什麼你使用'preg_replace'而非['str_replace'(http://www.php.net/manual/en/function.str-replace.php)或['strtr']( http://www.php.net/manual/en/function.strtr.php)? – Jon

+0

適合我的工作:http://www.ideone.com/ycu2E – 999999

+1

它適用於我(儘管每個人都對,preg_replace不合適)。也許你的輸入有問題。 – mqsoh

回答

1

那麼如何使用string_replace這不需要正則表達式。

$sText = preg_match("'", "", $sText); 

這就是說,下面的代碼片斷可以作爲在5.3假設:

$text = "woo't"; 
$text = preg_replace('/\'/', '', $text); 
echo $text; // woot 
3

&#039代表一個撇號的HTML實體編碼,即htmlspecialchars($text, ENT_QUOTES)。您可以檢查兩種情況:

$text = "hey this is ' a couple of ' apostrophes with an encoding '"; 
$text = preg_replace('/&#0*39;|\'/', '', $text); 

// outputs: hey this is a bunch of apostraphes 
echo $text; 

您也可以堅持使用str_replace()當量(往往跑得更快):

$text = "hey this is ' a couple of ' apostrophes with an encoding '"; 
$text = str_replace(array("'", "'"), '', $text); 

// outputs: hey this is a bunch of apostraphes 
echo $text; 
8

你可以使用這個正則表達式來刪除撇號

$text = preg_replace('/(\'|&#0*39;)/', '', $text); 

你也可以使用str_replace刪除撇號後做html_entity_decode

$text = str_replace("'","", html_entity_decode($text, ENT_QUOTES)); 
+3

[HTML實體邊界 - 零填充](http://hakre.wordpress.com/2010/02/25/html-entity-boundaries-zero-padding/)。 – hakre

1

除了其他答案,您可能還想檢查unicode表示嗎?

$result = preg_replace('/([\'\x{0027}]|')/u', '', $subject);