Невозможно заменить £ на £ из строки - PullRequest
7 голосов
/ 22 ноября 2011

У меня есть HTML-строка, содержащая знаки £, по какой-то причине я не могу их заменить. Я предполагаю, что это проблема кодирования, хотя я не могу понять, как. Сайт использует ISO-8859-1 для своей кодировки

$str = '<span class="price">£89.99</span>';
var_dump(mb_detect_encoding($str, 'ISO-8859-1', true)); // outputs ISO-8859-1

echo str_replace(array("£","&pound;"),"",$str); // nothing is removed

echo htmlentities($str); // the entire string is converted, including £ to &pound;

Есть идеи?

EDIT

должен был указать, что я хочу заменить £ на &pound; - я временно добавил &pound в массив элементов для замены в случае, если он уже был преобразован

Ответы [ 4 ]

7 голосов
/ 22 ноября 2011

Просто предположение, но может ли быть так, что даже если ваш сайт выводит кодировку ISO-8859-1, ваши настоящие * .php файлы сохраняются как utf-8?я не думаю, что str_replace правильно работает со строками utf-8.Чтобы проверить это, попробуйте:

str_replace(utf8_decode("£"),"&pound;",utf8_decode($str));

Да, если это работает, ваши * .php файлы сохраняются в кодировке utf-8.Это означает, что все строковые константы находятся в utf-8.Вероятно, стоит переключить кодировку по умолчанию в вашей IDE на ISO-8859-1

1 голос
/ 22 ноября 2011
html_entity_decode(str_replace("&pound;", "", htmlentities($str)));
0 голосов
/ 06 ноября 2017
$data = str_replace("£","&pound;",utf8_encode($data));
echo $data;
0 голосов
/ 22 ноября 2011
$str = '<span class="price">£89.99</span>';
echo str_replace("£","&pound;",$str);

Выход:

<span class="price">&pound;89.99</span>
...