PHP转换为“”

时间:2011-11-04 12:52:33

标签: php html scripting

我一直试图让这个工作在过去的3个小时内工作,但无济于事。

<?php
    foreach ($array as $item) {
      $item = preg_replace("~ (?=[^<>]*(<|$))~", "&nbsp;", $item);
      logWrite($item);
      echo $item;
    }
?>

$array由一系列项目组成,例如"bread""cheese""red wine" - regexp用于确保它仅适用于打开和关闭html标记之间的文本(此处有人提供)。

无论如何问题是,当我写入日志时 - 它出现在"bread""cheese""red&nbsp;wine"但是回显(我也试过打印)在html上页面与"bread""cheese""red wine"保持不变。

如果我使用其他字符替换,例如&reg;它运作正常。有什么想法为什么这个特定的实体不起作用?我觉得我的字符集都很好。

谢谢!

5 个答案:

答案 0 :(得分:3)

您不需要在此处使用正则表达式。试试:

$item = str_replace('&nbsp;', ' ', $item);

如果你想检查HTML标签之间是否&nbsp;,你应该在(if声明等)之前进行检查 - 它会更清楚。

但是不要在html中使用regexp - 这很邪恶。

答案 1 :(得分:1)

&nbsp;是“非破坏空间”的HTML实体,因此它将在HTML文档中显示为空格(而不是实际字符),因此您不会注意到{{1和一个普通的空间。查看源代码,您将看到它。

答案 2 :(得分:0)

假设您对解码所有HTML实体感兴趣,可以使用html_entity_decode

http://www.php.net/manual/en/function.html-entity-decode.php

这比尝试使用正则表达式要简单得多。

答案 3 :(得分:0)

如果要在HTML网页上显示“原始”HTML内容,则应使用htmlspecialchars()

echo htmlspecialchars( $item );

答案 4 :(得分:0)

根据http://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

  

我有一些字符,解析器不知道如何插入,因为它超出了UTF8格式的字节范围。一些PHP函数,比如iconv,仍然会让一些非UTF8字符破坏解析器。 preg_replace根据它的字节序列删除任何非UTF8字符,并用问号替换它。

//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
 '|[\x00-\x7F][\x80-\xBF]+'.
 '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
 '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
 '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
 '?', $some_string );

//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
 '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string );