首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中转换HTML-实体和preg_replace

如何在PHP中转换HTML-实体和preg_replace
EN

Stack Overflow用户
提问于 2015-06-12 14:48:04
回答 1查看 1.6K关注 0票数 0

我正在尝试将 转换为whitespace

然后使用preg_replace执行一些Regex操作。

就像这样。

代码语言:javascript
复制
$title = " TEST Ok.2-2";
$title = mb_convert_encoding($title, 'UTF-8', 'HTML-ENTITIES');
//$title = html_entity_decode($title, ENT_NOQUOTES, 'UTF-8');
//( MEAN: I can use mb_convert_encoding() or html_entity_decode())
//GOT the same out put = TEST < Ok.2-2.

//So now I have TEST < Ok.2-2
//I want to make a space on Ok so I use preg_replace()
$replace = "~\s+(ok[.]?)~i";
$title = preg_replace($replace, ' OK. ', $title, -1);
$title = preg_replace('/\s+/', ' ', $title);
$title = trim($title);

//The result = TEST < Ok.2-2 (not work!)
echo($title);

使用这段代码,mb_convert_encodinghtml_entity_decode工作得很好,但是当我尝试使用preg_replace来调整空白时,似乎找不到转换过的空格。

现在输出:TEST < Ok.2-2

预期产出:TEST < OK. 2-2

现在是我的解决方案

我将str_replace添加到硬代码中,将&nbsp;替换为空白,并使用mb_convert_encoding或html_entity_decode来转换另一个added实体。

代码语言:javascript
复制
$title = '&nbsp;TEST&nbsp;&lt;&nbsp;Ok.2-2';
$title = str_replace('&nbsp;', ' ', $title);
$title = mb_convert_encoding($title, 'UTF-8', 'HTML-ENTITIES');
//$title = html_entity_decode($title, ENT_NOQUOTES, 'UTF-8');
//( MEAN: I can use mb_convert_encoding() or html_entity_decode())
//GOT the same out put = TEST < Ok.2-2.

//So now I have TEST < Ok.2-2
//I want to make a space on Ok so I use preg_replace()
$replace = '~\s+(ok[.]?)~i';
$title = preg_replace($replace, ' OK. ', $title, -1);
$title = preg_replace('/\s+/', ' ', $title);
$title = trim($title);

//The result TEST < OK. 2-2 (WORK!)
echo($title);

现在我的输出:TEST < OK. 2-2

我的期望:TEST < OK. 2-2

有最好的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-12 15:15:55

我想这会给你你想要的。

代码语言:javascript
复制
$title = trim(
     preg_replace('~\s+~', ' ', 
          str_ireplace(array('&nbsp;', ' ok.'), array(' ', ' OK. '), 
     "&nbsp;TEST&nbsp;Ok.2-2")
     )
);

这将:

  1. 带前导和尾随空白(trim)
  2. 用单个空白(preg_replace('~\s+~', ' ')替换多个空白
  3. &nbsp;替换为单个空间(str_ireplace)
  4. 替换ok.大小写不敏感于OK. (str_ireplace)

输出:

测试好了。2-2

您的HTML实体解码示例是正确的,http://sandbox.onlinephpfunctions.com/code/eed7e30d507f7197585f29c1fdde9e7744fc572d

代码语言:javascript
复制
$title = html_entity_decode("&nbsp;TEST&nbsp;Ok.2-2", ENT_NOQUOTES, 'UTF-8');
echo $title;

输出:

测试测试Ok.2.2-2

编辑:

代码语言:javascript
复制
<?php
$title = '&nbsp;TEST&nbsp;&lt;&nbsp;Ok.2-2';
$title = trim(preg_replace('~\s+~', ' ', str_ireplace(array('&nbsp;', '&lt;', 'Ok.'), array(' ', '', ' OK. '), $title)));
echo $title;

使用str_replace删除这两个实体可能更安全。如果您的字符串是<h1>&nbsp;TEST&nbsp;&lt;&nbsp;Ok.2-2</h1>,并且已经解码,那么删除所有的<,您的字符串就不会像原来那样起作用了。

输出:

测试好了。2-2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30805980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档