【问题标题】:trim() not catching AJAX posted data value of  trim() 没有捕捉到 AJAX 发布的数据值
【发布时间】:2013-05-25 22:12:30
【问题描述】:

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

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

Testing title   middle   entry    

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

Testing_title___middle___entry____

我将这个.text() 值发布到我的PHP 后端。我在那里完成了保存过程。因为我需要修剪字符串,所以基本的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)

【问题讨论】:

  • 在发送工作之前是否在客户端修剪它(使用$.trim)?
  • 是的,客户端修剪工作,但这并没有改变我希望这发生在服务器端的事实。此外,question here 透露,客户端 $.trim() 的 IE (MSAjax) 中存在错误。

标签: php jquery unicode trim


【解决方案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 的正则表达式匹配会匹配它,但与空格的简单比较则不会。

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

【讨论】:

  • 试过了,在那里找不到 。请有问题地查看字符串在发布时的样子,我想这就是 PHP 看到它的方式,因此那里没有  
  • 第二种方法怎么样?
  • preg_replace('/\s/iu', ' ', $title) 做到了,是的。但不适用于mb_ereg_*
猜你喜欢
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多