2016-11-02 8 views
1

Я получаю строку через file_get_contents($file).PHP preg_match/replace не работает над символом «ndash» после file_get_contents

Почему я не могу заменить «-» (не «минус», а HTML –) на функцию preg_replace PHP? preg_match также не работает:

например.

Выход $file является «бла-бла».

$str = file_get_contents($file); $str = preg_replace('/–/', 'test', $str); echo $str;

blah test blah должен вернуться, но возвращает blah – blah.

Сыворотка такова, и как я могу заменить ndash?

Благодарим за помощь!

+1

Try ''/\ р {Pd}/u'' первым. Если это не сработает, вероятно, что символ присутствует в строке в качестве объекта, и перед преобразованием символа в объект необходимо запустить 'preg_replace', или вам нужно использовать' html_entity_decode' перед заменой. Например. 'preg_replace ('/ - /', 'test', html_entity_decode ($ str))' –

+0

У меня нет абсолютно никакой проблемы с этим (кроме очевидной синтаксической ошибки в вашей кодовой строке). Скорее всего, вы не перегружали свои функции preg для работы в многобайтовом режиме. – arkascha

+2

Я пробовал свой код с помощью онлайн-редактора php, и он отлично работал http://sandbox.onlinephpfunctions.com/code/7e5bbced117493fc6a9282444197360a1ae75dde – Hearner

ответ

1

Кажется, что файл содержит объект HTML для длинной тире, и для получения простого текста с вам нужно сначала использовать html_entity_decode.

Использование

$str = preg_replace('/–/', 'test', html_entity_decode($str)); 
            ^^^^^^^^^^^^^^^^^^^^^^^^ 

PHP demo:

$str = 'blah – blah'; 
echo "Original: " . $str . "\n"; 
$str = preg_replace('/–/', 'test', html_entity_decode($str)); 
echo "Replaced: " . $str; 

Выход:

Original: blah – blah 
Replaced: blah test blah 

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

  • Нет связанных вопросов^_^