1

我猜 & 和 ; 搞砸了我的搜索。当我只搜索 mdash 时,它会找到它,但当然不会替换 & 或 ; 围绕它。

这是我尝试过的,我认为应该可行的方法(我也尝试了很多其他的东西,但是......):

$description = "there. — with David";
$description = preg_replace("/\&mdash\;/", "—", $description);

我已经用谷歌搜索并搜索了所以无济于事,所以现在我只是把头发拉出来......

谢谢!

添加:

我从网址获得 $description: ?description=clay%252520%252526mdash%25253B%252520with%252520Veronica

$description = $_GET["description"];
$description=rawurldecode($description);
$description=rawurldecode($description);
$description=htmlentities($description);
$description=stripslashes($description);
$description = preg_replace("/\&mdash\;/", "—", $description);
echo $decription;

生产:粘土 & mdash; 使用 Veronica(没有 ' ' 在 & mdash 之间),因为它在此处转换为 mdash

4

3 回答 3

2

您不应该使用preg_replace来替换常量字符串。改用就好str_replace了。

$description = str_replace("—","—", $description);
于 2013-06-26T00:51:42.817 回答
1

您的 & 实际上是 html 实体&,因此您需要替换它

$description =str_replace("—", "—", $description);

html_entity_decode()是另一种方法

于 2013-06-26T01:16:32.560 回答
0
  tim@roflcopter /tmp $ cat >blah.php
  <?php
  $description = "there. &MDASH; with David";
  $description = preg_replace("/\&mdash\;/i", "—", $description);
  echo $description;

  tim@roflcopter /tmp $ php blah.php
  there. — with David

看起来它可以工作,但是如果你要使用 preg_replace,你可能想要做一个不区分大小写的替换......这可能是你的搜索中断问题。

于 2013-06-26T01:05:14.173 回答