2017-08-18 148 views
0

我想用常規破折號替換這個字符http://www.fileformat.info/info/unicode/char/2014/index.htm ,這是我還沒有得到它的工作?PHP替換EM破折號REGEX

$dataold = "9am – 5pm"; // from a ms word doc 

$data = mb_ereg_replace("[\xE2 \x80 \x94]", " - ", $dataold); 

print_r($data); 
+0

問題:您的示例代碼具有 「N」 破折號。你要求一個「M」短跑。只要您刪除RegEx中的空白,您使用的代碼對於「M」破折號就可以正常工作。 – JBH

+0

你只是想把所有破折號歸一化爲一個'space-space'?我想你可能只是使用'preg_replace('〜\ p {Pd}〜u',' - ',$ s)'。否則,對於EN-DASH,只需使用'str_replace(' - ',' - ',$ s)'對於EM-DASH和'str_replace(' - ',' - ',$ s)''。 –

回答

1

爲什麼與八進制Unicode格式煩惱呢?爲什麼不......

更換一個N短跑

$dataold = "9am – 5pm"; // from a ms word doc 
$data = mb_ereg_replace(" – ", " - ", $dataold); 
print_r($data); 

更換的M-短跑

$dataold = "9am — 5pm"; // from a ms word doc 
$data = mb_ereg_replace(" — ", " - ", $dataold); 
print_r($data); 

你原來的代碼工作正常,但在樣品文本字符串有N-dash,你正在測試M-dash。 (你在RegEx中有額外的空間)。試試這個...

$dataold = "9am — 5pm"; // from a ms word doc 
$data = mb_ereg_replace("[\xE2\x80\x94]", " - ", $dataold); 
print_r($data); 
+0

因爲如果字符串中有任何unicode字符,它將很難保持。使用正確的代碼會更清楚。 :) – yacc

0

試試這個:

$dataold = "9am – 5pm"; // from a ms word doc 
$data = mb_ereg_replace("/ \\x{2014} /u", " - ", $dataold); 
print_r($data); 
+0

嗯沒有運氣:/。更新了 – NZSteve

+0

,你現在得到了什麼? – yacc

+0

仍然得到相同的結果:/ – NZSteve

0

我得到它的工作,但 - 字符直接從您粘貼的頁面複製(從您的代碼複製不起作用)。

<?php 
$dataold = "9am — 5pm"; // from a ms word doc 
$data = mb_ereg_replace("\x{2014}", "dash", $dataold); 
print_r($data); // output = 9am dash 5pm 

演示:https://3v4l.org/9Lkpr

+0

這不起作用。 – JBH