substituir caracteres utf8 multibyte em php

Eu estou tentando preg_replace o multibytecharacter para euro em UTF (mostrado como "em meu html) para um" $ "e o * para um" @ "

$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);

Os "*" estão sendo substituídos, mas não o "¬" .......

Também tentou substituí-lo com

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

Não converte também ....

Outro plano que não funcionou:

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

Brrr alguém sabe como se livrar deste personagem utf8 euro:

echo html_entity_decode('€');

(me deixando louco)

0
de $ orig = str_replace (html_entity_decode ('& euro;'), '$', $ orig); eu recebo um erro: "erro de sintaxe, inesperado ','"
adicionado o autor Mark Boos, fonte
Lol, eu olhei para isso tanto tempo que perdi completamente que era outra linha .... Então funciona! Uma Coisa; Por que não consigo fazer isso funcionar com preg_replace ..? Muito obrigado btw!
adicionado o autor Mark Boos, fonte
Não funcionaria str_replace (html_entity_decode ('& euro;'), '$', $ source)?
adicionado o autor Mathieu Dumoulin, fonte
Seu erro de sintaxe tem que ser de algum outro lugar, eu apenas asted o código no meu servidor e funciona bem, não há erro de sintaxe ... Você tem certeza que você copiou as coisas como está?
adicionado o autor Mathieu Dumoulin, fonte
Eu não sei, eu só faço regexp básico, talvez alguém possa te ajudar nessa parte
adicionado o autor Mathieu Dumoulin, fonte

3 Respostas

Colando meu comentário aqui como resposta para que você possa marcá-lo!

Não seria

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

trabalhos?

0
adicionado

Isso pode ser causado por dois motivos:

  1. The actual source text is UTF8 encoded, but your PHP code not. You can solve this by just using this line and save your file UTF8 encoded (try using notepad++).

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

  2. The source text is corrupted: multibyte characters are converted to latin1 (wrong database charset?). You can try to convert them back to latin1:

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

0
adicionado

Na sua string $ orig você não possui sinal de euro. Quando eu corro este arquivo php:

<?php
$orig = "â¬";
for($i=0; $i

BTW se o arquivo UTF-8 contendo € for exibido como latin-1, você deve obter: e não ¬ como no seu exemplo.

Então, na verdade, você tem problemas com codificação e conversão entre codificações. Se você tentar salvar em latin1, o caractere do meio será perdido (por exemplo, meu Komodo irá me alertar e então substituir por ? ). Em outras palavras, você de alguma forma danificou o seu sinal de € - e então você tentou substituí-lo como ele estava completo. : D

0
adicionado
PHP Brasil
PHP Brasil
3 048 dos participantes

Neste grupo pregamos o respeito ao próximo e não são permitidas ações que sejam contrárias à isso. Conduta: https://bit.ly/2CImbaA Off-topic: https://bit.ly/2x64Dzf Blog: https://brasil-php.github.io/blog Use /rules para ver detalhes das regras

PHP Brasil Off
PHP Brasil Off
167 dos participantes

Regras: não há regras