trim()没有捕获AJAX发布的数据值

时间:2013-05-30 11:00:40

标签: php jquery unicode trim

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

因为它是contenteditable,在重复空格条目而不是空格时,它会添加 ,因此生成的HTML可以是:

Testing title   middle   entry    

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

Testing_title___middle___entry____

我发布到我的PHP后端的.text()值。在那里,我经历了保存程序。因为我需要剪裁字符串,所以基本的trim($title)没有剪掉它。

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

我也试过这个How to decode Unicode escape sequences like "\u00ed" to proper UTF-8 encoded characters?,也没有帮助。

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)

1 个答案:

答案 0 :(得分: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代码点的UTF-8编码(与HTML调用的代码点相同)。

     

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

尝试使用regexp按照上面的建议进行匹配?