2012-01-27 108 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);