2012-06-21 3 views
1

Я пытаюсь preg_replace в multibytecharacter для евро в UTF (показано ⬠в моем HTML) к «$» и * для «@»заменить многобайтовая utf8 символ в PHP

$orig = "2 **** reviews ⬠19,99 price"; 
$orig = mb_ereg_replace(mb_convert_encoding('€', 'UTF-8', 'HTML-ENTITIES'), "$", $orig); 
$orig = preg_replace("/[\$\;\?\!\{\}\(\)\[\]\/\*\>\<]/", "@", $orig); 
$a = htmlentities($orig); 
$b = html_entity_decode($a); 

"*" заменяются, но не в "â¬" .......

также попытался заменить его

$orig = preg_replace("/[\xe2\x82\xac]/", "$", $orig); 

не конвертировать либо ....

Другой план, который не работал:

$orig= mb_ereg_replace(mb_convert_encoding('&#x20ac;', 'UTF-8', 'HTML-ENTITIES'), "$", $orig); 

Бррр кто-то знает, как избавиться от этого utf8 евро характера:

echo html_entity_decode('&euro;'); 

(сводит меня с ума)

+1

Не будет str_replace (html_entity_decode ('€'), '$', $ source) работать? –

+0

от '$ orig = str_replace (html_entity_decode ('€'), '$', $ orig);' я получаю сообщение об ошибке: «Синтаксическая ошибка, неожиданность», « –

+0

Ошибка синтаксиса должна быть от где-то еще, i просто изучил код на моем сервере, и он отлично работает, нет синтаксической ошибки ... Вы уверены, что скопировали материал как есть? –

ответ

0

Оклейка мой комментарий здесь в качестве ответьте, чтобы вы могли отметить его!

Не был бы

str_replace(html_entity_decode('&euro;'), '$', $source) 

работа?

4

Это может быть вызвано двумя причинами:

  1. Фактический исходный текст UTF8 кодируется, но ваш PHP код не. Вы можете решить эту проблему, просто используя эту строку и сохраните файл UTF8 в кодировке (попробуйте использовать блокнот ++).

    str_replace ('€', '$', $ source);

  2. Исходный текст поврежден: многобайтовые символы преобразуются в latin1 (неправильная кодировка базы данных?). Вы можете попытаться преобразовать их обратно в latin1:

    str_replace ('€', '$', utf8_decode ($ источника))

0

В вашей $orig строке вы не имеете знак евро. Когда я запускаю этот PHP файл:

<?php 
$orig = "â¬"; 
for($i=0; $i<strlen($orig); $i++) 
    echo '0x' . dechex(ord($orig{$i})) . ' '; 
?> 

Если сохранены как UTF-8 я получаю: 0xc3 0xa2 0xc2 0xac

Если сохранены как латинская-1 я получаю: 0xe2 0xac

В любом случае это не € знак: 0xE2 0x82 0xAC или unicode \u20AC (http://www.fileformat.info/info/unicode/char/20ac/index.htm). 0x82 не хватает !!!!!

Запустите эту программу выше, посмотрите, что вы получаете, и используйте эти шестнадцатеричные значения, чтобы избавиться от â¬.

Для реального знака это работает:

<?php 
    $orig = html_entity_decode('&euro;', ENT_COMPAT, 'UTF-8'); 
    $dest = preg_replace('~\x{20ac}~u', '$', $orig); 

    echo "($orig) ($dest)"; 
?> 

BTW, если UTF-8 файл, содержащий € отображается как Latin-1 вы должны получить: € и не ⬠как в вашем примере.

Таким образом, у вас есть проблемы с кодированием и преобразованием кодировок. Если вы попытаетесь сохранить € в latin1, средний персонаж будет потерян (например, мой Комодо предупредит меня, а затем заменит на ?). Другими словами, вы каким-то образом повредили свой знак «€», а затем попытались заменить его, как только он был завершен. : D

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

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