不能用PHP str_replace一个字符

时间:2013-10-23 13:31:49

标签: php

我想替换例如PHP中的KPI’s和“”。我从阵列中得到它。

echo "before:".$columnarray[$i]."<br/>";
$columnarray[$i] = str_replace("&#x2018;", "", $columnarray[$i]);
echo "after:".$columnarray[$i]."<br/>";

我在这个主页http://sonderzeichentabelle.de/中尝试了12个不同的特殊字符......但没有任何效果。

我做错了什么?

enter image description here

3 个答案:

答案 0 :(得分:0)

你应该改变

$columnarray[$i] = str_replace("&#x2018;", "", $columnarray[$i]);

$columnarray[$i] = str_replace("'", "", $columnarray[$i]);

答案 1 :(得分:0)

您的str_replace正在寻找文字&#x2018;,而不是它所代表的字符,这就是为什么它没有被替换的原因。您需要将其转换为角色并使用它。我相信您要使用chr()您可以使用ord()

找出该角色的确切代码

您需要使用ord()来确定代码是什么。您也可以使用html_entity_decode,因为您的角色不是Ascii代码。

$character = html_entity_decode('&#x2018;', ENT_COMPAT, 'utf-8');
str_replace($character, "", $columnarray[$i]);

找到正确的代码转储html_entity_decode($columnarray[$i])并查看代码是什么,并在上面的代码中替换。

答案 2 :(得分:0)

撇号是biggest pains of digital typography中的一个,基本上是出于这个原因。有两个常见的变体(印刷品=卷曲,打字机=笔直),你设法在你的问题中使用这两个变体,并且每个变体中的两个变体(左和右),以及至少三个相似的看起来很常见的字符在撇号(素数,冲绳,坟墓)的地方滥用。在维基百科或无数的喜剧爱好者网站上阅读更多内容。

最简单的解决方案是利用传递str_replace一组值来查找的能力:

$apostrophes = array(
    "curly-left" => "‘",
    "curly-right" => "’",
    "straight-left" => "'",
    "straight-right" => "'",
    "prime" => "′",
    "okina" => "ʻ",
    "grave" => "`"
    );

$columnarray[$i] = str_replace($apostrophes, "", $columnarray[$i]);