2013-12-07 2 views
1

Я хочу удалить текст из своего заголовка (используя wordpress). Пример: Alexandra Stan - Mr. Saxobeat Выход: г-н SaxobeatPHP: удалить все до первого '-'

Я попробовал много кодов, один из этой работы совершенной:

$str = "this comes before – this comes after"; 
$char = " - "; 
$strpos = strpos($str, $char); 
$str = substr($str, $strpos+strlen($char)); 
echo $str; 

, но после того, как много раз пробовать и получить upsed ... я см., что на моей странице статьи Wordpress, когда я печатаю «-» в заголовке, wordpress меняет его автоматически: «-« кто отличается (больше), чем обычный »-« (копируйте в другой шрифт, и вы увидите разницу) ,

Я пытаюсь заменить "-" с "-", но выход "s приходит раньше - это происходит после того, как"

Спасибо!

ответ

3

Это в em dash вы пытаетесь заменить. Однако вы ищете регулярную тире. Попробуйте запустить строку через этот беспорядок кода первого и читать blog article я получил его от

EDIT

Полный рабочий пример, в основном вставив пример кода из блога статьи и фиксируя небольшую ошибку с вашим substr

function scrub_bogus_chars(&$text) { 
    // First, replace UTF-8 characters. 
    $text = str_replace(
    array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93",  "\xe2\x80\x94", "\xe2\x80\xa6"), 
    array("'", "'", '"', '"', '-', '--', '...'), 
    $text); 

    // Next, replace their Windows-1252 equivalents. 
    $text = str_replace(
    array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)), 
    array("'", "'", '"', '"', '-', '--', '...'), 
    $text); 
} 

// Original string (with em dash) 
$text = "this comes before – this comes after"; 

// Ensure regular dashes will be available 
scrub_bogus_chars($text); 

// Lastly, extract the interesting part of the original string 
$char = ' - '; 
$strpos = strpos($text, $char); 
$text = substr($text, $strpos + strlen($char)); 
echo $text . PHP_EOL; 
+1

+1: на самом деле прочитав вопрос (хотя ваш код выглядит как ars .. Думаю, это не поможет) '= /' –

+0

@note Это работает для регулярных тире и тире. – quickshiftin

+0

@ tereško Код был в основном вырезанным и вставляемым, но я только что его очистил, черт возьми;) – quickshiftin

0

Это не нормальная черточка - это специальный utf8 char . Вы должны использовать специальный символ в своем коде. С explode():

$parts = explode(' – ', 'this comes before – this comes after'); 
echo $parts[1]; 

Или с preg_match():

preg_match('~\– (.*)~', 'this comes before – this comes after', $matches); 
echo $matches[1]; 
+0

Или у вас может быть более общее решение, подобное моему, которое работает с обычными тире или эмбициями. – quickshiftin

0

Здесь:

echo explode($char, $str)[1]; 
1

Вы должны использовать взрываются:

$str = "Alexandra Stan - Mr. Saxobeat "; 
$char = " - "; 
$str = explode($char, $str); 
echo $str[1]; 

Возвращает

Г-н Saxobeat

+0

Это не поймает em dash в его исходной строке, которая выглядит как настоящая проблема. – quickshiftin

+0

@quickshiftin: Извините, я французский, я не понимаю, что вы подразумеваете под «em dash» Редактировать: ok получил это, вы правы, что я опубликовал, не позаботятся об этом – user2196728

Смежные вопросы