4

我有一个contenteditable元素,onblur它将它的价值发布到服务器。

因为它是一个contenteditable,在重复的空格条目上,它不是空格,而是添加 ,所以生成的 HTML 可以是:

Testing title   middle   entry    

当使用.text()from 元素检索时,看起来像正常间隔(下划线标记空格):

Testing_title___middle___entry____

我将这个.text()值发布到我的 PHP 后端。我在那里完成了保存过程。因为我需要修剪绳子,所以基本trim($title)没有剪掉它。

而且,我似乎无法理解它。

我也试过这个如何将像“\u00ed”这样的Unicode转义序列解码为正确的UTF-8编码字符?,也没有帮助。

Chrome 网络检查器显示它通过此编码数据发送:

Testing+title+%C2%A0+middle+%C2%A0+entry+%C2%A0+%C2%A0

implode(', ', unpack('C*', $title))返回:

84, 101, 115, 116, 105, 110, 103, // Testing
32, // space
116, 105, 116, 108, 101, // title
32,
194, 160, //  
32,
109, 105, 100, 100, 108, 101, // middle
32,
194, 160,
32,
101, 110, 116, 114, 121, // entry
32,
194, 160,
32,
194, 160

$title最终只是一个$_POST['title']

如何从该字符串中修剪所有空格?


最后,解决方案是:

$title = preg_replace('/\s/iu', ' ', $title)
4

1 回答 1

1

 在开始修剪之前用空格替换所有内容怎么样?

$text= str_replace(' ', ' ', $text)

或者,如果您想保持 unicode 安全,可以使用mb_eregi_replace http://www.php.net/manual/en/function.mb-eregi-replace.php

编辑 - 第二种方法:

根据这个答案(https://stackoverflow.com/a/13992998/486780

194 160 是 NO-BREAK SPACE 代码点(与 HTML 调用的代码点相同)的 UTF-8 编码。

所以它真的不是一个空间,即使它看起来像一个空间。(例如,您会看到它不会自动换行。) \s 的正则表达式匹配会匹配它,但与空格的简单比较不会。

按照上面的建议尝试使用正则表达式来匹配它?

于 2013-05-30T11:05:04.867 回答