2012-01-27 110 views
5

我在文本中有一個奇怪的短劃線,這在str_replace中未被檢測到。PHP中的奇怪短劃線字符

下面是一個例子:

Sun: 10:00 – 3:00pm

我不知道,如果儀表板會顯示在這裏..但是當它插入我的表,這就像與一個方盒子字符0096

它看起來很像– - 查看源代碼時,沒有特殊字符,只有短劃線。

str_replace('–', '', $var); 

上面的替換似乎沒有抓住它,有沒有其他人有過這種麻煩?

+1

你應該給我們[base64_encode](http://www.php.net/base64_encode)格式的字符串,以便它保存的二進制安全。這使我們能夠識別角色。 – goat 2012-01-27 00:32:19

+0

只是問明顯,但你保存str_replace的返回值?即'$ var = str_replace(' - ','',$ var);'str_replace不直接對字符串進行操作。 – tangrs 2012-01-27 00:32:43

+0

你的桌子使用什麼字符集? – 2012-01-27 00:37:39

回答

12

這是一個en dash。在PHP中,最便攜的方式得到它與html_entity_decode

$endash = html_entity_decode('–', ENT_COMPAT, 'UTF-8'); 
echo str_replace($endash, '(en dash)', 'Sun: 10:00 – 3:00pm'); 

請注意,這僅適用於如果你的網站的編碼是UTF-8 你的編輯器編碼(或第三個參數來str_replace編碼)也是如此。如果您使用其他編碼(並且您應該爲網站和編輯器使用相同的編碼),請將html_entity_decode的第三個參數替換爲其名稱。

0

-短跑我們看慣了
EM 短跑是我們應該用大部分的時間,其中使用「 - 」。
基本上,這是一個語法的東西。

在維基百科上閱讀起來:http://en.wikipedia.org/wiki/Dash

在Mac(美國鍵盤佈局),我把它按下Alt + - ,你一樣得到_用SHIFT + _

你不需要任何特殊處理,因爲它是一些中國的象徵。這是一個有效的角色。像這樣對待它:str_replace('–', 'em dash');

1

另一種可選擇的,如果其他的答案不適合你,就像在我的情況,這對我的作品。

$title = "Hunting, Tactical & Outdoor Optics eCommerce Store ΓÇô $595,000 ΓÇö SOLD"; 
$title = str_replace(html_entity_decode('–', ENT_COMPAT, 'UTF-8'), '-', $title); 
$title = str_replace(html_entity_decode('—', ENT_COMPAT, 'UTF-8'), '-', $title);