2015-08-14 21 views
8

Tôi đã xem các giải pháp khác herehere, nhưng nó không hoạt động đối với tôi.Làm cách nào để xóa dấu gạch ngang 'em' khỏi chuỗi?

$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>"; 

Output

"ALIEN PHIM MOVIE - PSP - Sony đóng hộp & Complete"

Làm thế nào để loại bỏ nhân vật này?

+0

Giải thích thêm về các loại dấu gạch ngang, endash là ngắn, emdash là dài - > Đừng nhầm lẫn dấu gạch ngang (-) cho dấu gạch ngang hẹp hơn (-) hoặc dấu gạch ngang hẹp hơn (-). Những nhãn hiệu này phục vụ cho các mục đích khác nhau và được giải thích thêm trong các phần khác. [link] (http://www.thepunctuationguide.com/em-dash.html) – Mousey

Trả lời

7

này quy định một loạt các ñuoåi thể,

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

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

echo $s1clean; 

Khi chạy,

Ouput

ALIEN PHIM MOVIE PSP Sony đóng hộp & Hoàn

Tôi chỉ đơn giản là sao chép số dash lạ và thêm nó với khả năng dấu gạch ngang thực tế và nó hoạt động.

Reading Chất liệu

str_replace

+0

Cảm ơn bạn, nhưng khi tôi sao chép nó vào trình soạn thảo, nó chuyển đổi nó thành dấu gạch ngang, vì vậy tôi không thể làm điều đó. – user3314053

+1

Sử dụng trình chỉnh sửa khác. – GolezTrol

+0

@ user3314053 Tôi không chắc chắn cách phản hồi điều đó. Tôi không biết tại sao một biên tập viên sẽ thay đổi nó, tôi chỉ có thể gợi ý những gì các bình luận trên cho biết. – Script47

2

dấu gạch ngang của bạn là một kết hợp của dấu gạch ngang dài và hypen-trừ (dấu gạch ngang ngắn) - -Nếu bạn xem code của bạn và danh hiệu trong một phông chữ khác nhau mà bạn sẽ thấy sự khác biệt.

Có 2 dấu gạch ngang ngắn khi bắt đầu mã của bạn xóa và một số dấu gạch ngang dài sau đó sẽ không xóa.

Thêm này sẽ sửa chữa nó (đây là một dấu gạch ngang khác nhau ngay cả khi nó không giống như một):

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

Sửa

Ngoài ra lặp lại trong các dòng mã 2013 nhưng sử dụng hyphen-minus's code002D thay vì năm 2013:

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

Nếu bạn chỉnh sửa phông chữ cố định cả hai đều xuất hiện giống nhau , nhưng không.

+0

'Hoặc lặp lại dòng mã 2013 nhưng sử dụng mã của dấu gạch ngang khác năm 2014 thay vì 2013'. Điều gì khiến bạn cho rằng ký tự '-' là thực thể '& # x2014'? Đây là một giả định sai lầm. –

+0

@HalimQarroum nó không phải là một giả định, xem liên kết tôi đăng với mã Hex và thập phân. – Mousey

+0

Không được diễn giải là 'UTF-8', ký tự được OP công bố là ký tự 'EN DASH' (U + 2013), được gọi là thực thể' & # x2013; 'hoặc' – '. Bạn có thể so sánh chúng tại đây http://www.fileformat.info/info/unicode/char/2013/browsertest.htm. –

3

ở trên không làm việc cho tôi nhưng điều này đã làm:

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

Lưu ý: để sử dụng endash

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

từ Jay: http://php.net/manual/en/function.str-replace.php#102465

+1

Đây phải là câu trả lời đúng. –

1

một này làm việc cho tôi

$title = "Hunting, Tactical & Outdoor Optics eCommerce Store ΓÇô $595,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); 
Các vấn đề liên quan