【发布时间】:2014-02-09 01:41:16
【问题描述】:
我试图在特殊字符之间插入文本,但问题是 php 出于某种未知原因将某些特殊字符解释为 3 个字符。例如,如果您在以下任何符号上使用strlen(),它将返回 3:
➊➜❚✶➪
因此,我需要一种方法来弄清楚如何在字符串的每个特殊字符之间添加一些东西。例如,如果字符串是:
TE➊➜❚S✶T➪
理想的输出应该是:
|T|E|➊|➜|❚|S|✶|T|➪|
我试过用这个:
<?php
$string = 'TE➊➜❚S✶T➪';
$array = str_split($string);
foreach ($array as $char) {
$newstring .= '|'.$char;
}
$newstring .= '|';
echo $newstring;
?>
但是,由于 php 将特殊字符解释为 3 个字符,它会在三字符符号的每个单个字符之间插入标签,导致输出如下所示:
|T|E|â|ž|Š|â|ž|œ|â||š|S|â|œ|¶|T|â|ž|ª|
因此它正在改变这样的符号:
➊ => ➊
➜ => âžœ
❚ => âš
✶ => ✶
➪ => ➪
并将每个单个字符设置为数组的一个元素。
问题:有没有办法在将字符串拆分为每个字符以便在其间插入内容时将这些符号计为一个字符?
我尝试过的:
- UTF-8 编码
- 不带 BOM 的 UTF-8 编码
- 使用
htmlspecialchars() - 使用
htmlspecialchars_decode() - 使用
htmlentities() - 使用
html_entity_decode()
所有这些都完全没有改变。
有没有办法做到这一点?谢谢。
【问题讨论】:
-
提示:以
html...开头的函数旨在处理HTML。如果您遇到纯文本编码问题,它们几乎无济于事。 -
整个页面处理 HTML。它接受用户输入并在其上执行一些 php 操作,然后输出新文本。
-
老实说,我认为将
<CITE>转换为<CI|T|E|>会破坏您的应用程序。 -
该网站实际上并未在每个字符之间添加
|。我需要的真正结果是一个字符数组,以便进行比较。这个例子只是让问题更容易理解。另外,我刚刚尝试了<CITE>,它运行良好,但我不明白为什么会破坏它。 -
没关系...我看到人们总是用他们并不真正理解的随机函数破坏他们的输入数据(
addslashes()和strip_tags()是最受欢迎的)。我只是想阻止你这样做。很抱歉我的解释不够好。
标签: php string utf-8 special-characters