Почему str_replace не заменяет вопросительные знаки?

У меня есть строка с вопросительными знаками ('?'), и я хочу заменить ее чем-то разборчивым.

Однако str_replace не заменит никаких ? символы в моей строке...

$str = str_replace('?', 'replacement', $str);

Любые идеи?


person DeShawnT    schedule 16.07.2011    source источник


Ответы (2)


Этот код заменяет вопросительные знаки заменой слова, что означает, что это не тот код, который вы используете, или то, что в вашей строке не является вопросительным знаком.

Строковые функции PHP корректно работают только со строками в кодировке latin1 (iso-8859-1). Во многих кодировках может быть много кодовых точек, соответствующих глифу, который визуально выглядит как вопросительный знак, но не совпадает с ASCII ?.


$str = "Hello? Anyone home?";
$str = str_replace('?', 'replacement', $str);
echo $str;

Выход:

Helloreplacement

person Dan Grossman    schedule 16.07.2011
comment
+1 за хорошие рассуждения + поддержка. Кодирование кажется вероятным виновником здесь. - person Jon Gauthier; 16.07.2011
comment
Я нашел свою проблему. В моей строке есть специальные символы (шестнадцатеричное значение 80 и 0x93). Как очистить строку от этих специальных символов? - person DeShawnT; 16.07.2011
comment
Что делает их особенными? Что вы хотите с ними сделать? Что, если ваше «очищение» изменит смысл текста? - person Dan Grossman; 16.07.2011

Это заменит ? на space. Это может помочь вам.

<?php
$str = "this ? does ? indeed ? work";
$char='';
$str1 = str_replace('?',$char,$str);
echo $str1;
?>
person jeni    schedule 16.07.2011