我正在尝试将UTF中的欧元多字节技术字符(在我的html中显示为) preg_replace为"$“和表示"@”的*。
$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('€', 'UTF-8', 'HTML-ENTITIES'), "$", $orig);Brrr有人知道如何摆脱此utf8欧元字符:
echo html_entity_decode('€');(快把我逼疯了)
发布于 2012-06-22 03:14:49
这可能是由两个原因引起的:
PHP实际的源文本是UTF8编码的,但你的代码不是。您只需使用此行代码并将文件保存为UTF8编码(尝试使用notepad++)即可解决此问题。
Str_replace(‘wrong’,'$',$source);
Str_replace(‘欧元’,'$',utf8_decode($source))
发布于 2012-06-22 02:23:45
在这里粘贴我的评论作为答案,这样你就可以标记它了!
不会的
str_replace(html_entity_decode('€'), '$', $source)工作?
发布于 2012-10-21 00:32:37
在您的$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('€', ENT_COMPAT, 'UTF-8');
$dest = preg_replace('~\x{20ac}~u', '$', $orig);
echo "($orig) ($dest)";
?>顺便说一下,如果包含欧元的UTF-8文件显示为拉丁文-1,则应该得到:€,而不是示例中的â¬。
因此,实际上,您在编码和编码之间的转换方面存在问题。如果你尝试将€保存为latin1格式,中间字符将会丢失(例如,我的Komodo会提醒我,然后用?替换‚ )。换句话说,你不知何故损坏了你的欧元符号--然后你试图在它完整的时候把它替换掉。:D
https://stackoverflow.com/questions/11143717
复制相似问题