如何从字符串中删除 'em' 破折号?

How to remove 'em' dash from a string?

我看过其他解决方案here and here,但它对我不起作用。

代码

$s1clean = 'ALIEN - FILM - MOVIE – PSP – Sony - Boxed & Complete';
echo $s1clean;
echo "<br><br>";

// Remove dash
$s1clean = str_replace('-', '', $s1clean);

// Remove em dash
$em_dash = html_entity_decode('&#x2013;', ENT_COMPAT, 'UTF-8');
$s1clean = str_replace($em_dash, '', $s1clean);

$em_dash2 = html_entity_decode('&#8212;', ENT_COMPAT, 'UTF-8');
$s1clean = str_replace($em_dash2, '', $s1clean);

$s1clean = str_replace('\u2014', '', $s1clean);

echo $s1clean;
echo "<br><br>";

输出

"ALIEN FILM MOVIE – PSP – Sony Boxed & Complete"

如何删除这个字符?

这指定了一组可能的删除,

$s1clean = 'ALIEN - FILM - MOVIE – PSP – Sony - Boxed & Complete';

$s1clean = str_replace(["-", "–"], '', $s1clean);

echo $s1clean;

当运行,

输出

外星人电影 PSP 索尼盒装完整

我简单地复制了 奇怪的破折号 并添加了实际破折号的可能性并且它起作用了。

阅读Material

str_replace

您的破折号是长破折号 和 hypen-minus(短破折号)的混合体 - - 如果您以不同的字体查看您的代码和标题,您将看到差异。

您的代码删除了开头的 2 个短破折号,后面的一些长破折号没有删除。

添加这个将修复它(这是一个不同的破折号,即使它看起来不像一个破折号):

$s1clean = str_replace('–', '', $s1clean);

编辑

或者复制 2013 代码行,但使用 hyphen-minus's code 002D 而不是 2013:

 $em_dash = html_entity_decode('&#x002D;', ENT_COMPAT, 'UTF-8'); 

如果您使用固定宽度的字体进行编辑,两者看起来相同,但实际上并非如此。

以上对我不起作用,但这个对我有用:

$s1clean = str_replace(chr(151), '', $s1clean); // emdash

注意:用于 endash

$s1clean = str_replace(chr(150), '', $s1clean); // endash

来自周杰伦:http://php.net/manual/en/function.str-replace.php#102465

这个适合我

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