使用preg_replace从字符串中删除Â

时间:2014-12-22 10:06:27

标签: php regex preg-replace

当我删除金钱字符然后它工作但我必须要求这个字符

echo "Product Name :: ".$product_name = '£5 off bookings at A1Travel';

echo "<br/>".$product_name = preg_replace('/(^([^a-zA-Z0-9$¢£€¥])*|([^a-zA-Z0-9$¢£€¥])*$)/', '', $product_name);

输出是:

‚£5 off bookings at A1Travel

期望的输出:

£5 off bookings at A1Travel

4 个答案:

答案 0 :(得分:1)

您添加了^$,这意味着它只会匹配字符串的开头或结尾。所以你需要删除它们:

/(([^a-zA-Z0-9$¢£€¥])*|([^a-zA-Z0-9$¢£€¥])*)/

这意味着你的正则表达式可以简化为:

/[^a-zA-Z0-9$¢£€¥]*/

现在让我们进一步改进它。你永远不想用任何东西替换字符串。因此,让我们将量词从*(零次或多次)更改为+(一次或多次):

/[^a-zA-Z0-9$¢£€¥]+/

您会注意到这也会删除空格,所以我们也将其排除:

/[^a-zA-Z0-9$¢£€¥ ]+/

如果你想缩短它,让我们使用i修饰符来匹配不区分大小写并删除A-Z

/[^a-z0-9$¢£€¥ ]+/i

经过一些调试后,似乎我们需要处理utf / unicode问题。所以让我们添加u修饰符,如nhahtdh所说:

/[^a-z0-9$¢£€¥ ]+/ui

要对此进行测试,您还需要设置HTML页面的编码。一个简单的例子如下所示:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <?php
            $product_name = '£5 off bookings at A1Travel';
            echo 'Product Name :: ' . $product_name . '<br>';

            $product_name = preg_replace('/[^a-z0-9$¢£€¥ ]+/ui', '', $product_name);

            echo $product_name . '<br>';
        ?>
    </body>
</html>

regex demo

答案 1 :(得分:0)

您可以使用:

$input = '£5 off bookings at A1Travel';
$input = preg_replace('/[^\x00-\x7f£¢£€¥]+/u', '', $input);
//=> £5 off bookings at A1Travel

RegEx Demo

答案 2 :(得分:0)

请试试这个

$str= '£5 off bookings at A1Travel';
preg_replace('/[^\p{Latin}\d ]/u', '', $str);

答案 3 :(得分:0)

您也可以尝试这种方法,它将很有帮助

要从字符串中删除â字符

mysqli_set_charset($con,"utf8");

$price = "₹ 310.00";

$price2 = preg_replace('/[^(\x20-\x7F)]*/','', $price);

Result : 310.00

这有助于使用preg_replace从字符串中删除字符如Remove

谢谢