表意空间为http://www.charbase.com/3000-unicode-ideographic-space,它是一个CJK标点符号。它看起来像一个普通的空间,但它实际上在屏幕上占据2个位置而不是1个(就像汉字一样)
我尝试使用str_replace(" ","",$mystring)
来摆脱它们,但当然它不起作用,因为我在这里输入的空间是一个ASCII空间。我也尝试使用汉字输入法手动输入表意空间,但看起来这样我也可以摆脱其他部分字符'代码,它返回乱码。
那我怎么能摆脱这些空间?
答案 0 :(得分:2)
我可以通过复制您链接到的信息页面中的符号来更换字符。您可能希望为表意空间创建CONST
别名,以帮助更清晰地查找/替换编码。
// contains ideographic space between words
$start = 'before after';
// contains ideographic space in needle parameter
$test1 = str_replace(' ', '_', $start);
// contains ideographic space
define('ID_SPACE', ' ');
$test2 = str_replace(ID_SPACE, '&', $start);
// contains normal space in needle parameter
$test3 = str_replace(' ','_',$start);
// make sure we are using utf8 for this test
header('Content-Type: text/html; charset=utf-8');
echo $start.'<br/>';
echo $test1.'<br/>';
echo $test2.'<br/>';
echo $test3;
输出:
before after
before_after
before&after
before after
编辑以回答问题
虽然您看不到它,但正在显示的框中显示该字符,只需单击并拖动即可选择任何其他文本,然后您可以根据需要粘贴它。您也可以从我的答案中复制包含空格的代码。如果您看到 
之类的内容,则需要将您的字符集设置为utf-8
答案 1 :(得分:0)
您可以直接从转义的数值转换内容。我已经坐了很多年以下的功能。我没有写它,我担心我不记得我发现它的位置。这有点像黑客,但我认为这是一个非常有用的。
<?php
function code2utf($num) {
if($num<128)return chr($num);
if($num<2048)return chr(($num>>6)+192).chr(($num&63)+128);
if($num<65536)return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
if($num<2097152)return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128).chr(($num&63)+128);
return '';
}
print "a" . code2utf(0x3000) . "b" . code2utf(0x1f44d) . "\n";
当我跑这个时,我看到了:
$ php -f utftest
a b
请注意,看起来像两个空格的是一个双宽字符。
也许您可以使用上面的函数来构造输入字符串,如下所示:
str_replace(code2utf(0x3000),"",$mystring);
像这样的解决方案相比WebChemist的复制和粘贴解决方案的明显优势在于它完全是程序化的,并且不需要任何特殊功能作为程序员工具的一部分。在重新格式化代码时,您不会意外覆盖ID_SPACE字符,并且该函数可以重用于您可能需要表示的其他UTF8字符,而无需在代码中实际包含这些字符。
当然,另一种方法是使用内置的PHP函数html_entity_decode()
。下面的结果与我的函数相同,使用HTML转义字符作为输入:
$ php -r 'print html_entity_decode("a b👍") . "\n";'
a b
答案 2 :(得分:0)
一种对我有用的方法,将其原始编码为HTML实体&amp; str_replace
回到正常的空白区域。
//The space we're looking out for
$ideoSpace = "%26%23x3000%3B";
$space = "%20";
//Search string (Notice the wider space)
$searchstr = "Please find me a Oil Filter";
//Begin conversion
$searchstr = rawurldecode( str_replace( $ideoSpace, $space, rawurlencode( $searchstr )));
//echos "Please find me a Oil Filter"
也许不是最优雅的解决方案。但遗憾的是,搜索不适合我们,因为implode()
无法为日本客户分割字符串。