微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由javascript设置的输入值在PHP中的控制器中返回空

如何解决由javascript设置的输入值在PHP中的控制器中返回空

早上好,我的朋友们,

我正在局域网创建一个小聊天,我决定放一些表情符号。 但是,当我从输入中检索值并将所选表情符号添加到其中时,如果我不对输入字符串进行更多手动添加PHP 会将表情符号接收为空。

chat-room.blade.PHP - 在这里我创建了一个带有表情符号的气球 Unicode 范围

<div class="container-fluid" id="emoji-list" style="display: none; height: 0; width: 0;">
   <div id="emoji-scroll">
   @PHP
      $emojiUnicodeRange = [[0x1f600,0x1f64e],[0x1f910,0x1f91e],[0x1f920,0x1f927],[0x1f300,0x1f5ff],[0x1f680,0x1f6c1],[0x1f950,0x1f95e],[0x1f980,0x1f991]];
   @endPHP
   @foreach ($emojiUnicodeRange as $range)
      @for ($emojiUnicode = $range[0]; $emojiUnicode <= $range[1]; $emojiUnicode++)
         <span id="{{ html_entity_decode('&#' . $emojiUnicode . ';','UTF-8') }}" class="emoji-item" onClick="inserirEmoji(this.id)">{{ html_entity_decode('&#' . $emojiUnicode . ';','UTF-8') }}
         </span>
      @endfor
   @endforeach
   </div>
</div>

chat-room.blade.PHP - 这是打开表情符号气球的按钮 和输入文本

<span id="show-emoji-list" onclick="showEmojiList()">
       <i class="far fa-grin" aria-hidden="true"></i>
</span>
    <input wire:model="body" type="text" class="form-control input-sm rounded" id="msg-input" placeholder="Escreva sua mensagem...">

chat-room.blade.PHP - 这里是我用来打开和 关闭表情符号气球,并将点击的表情符号插入 输入

var emoji_list = document.getElementById('emoji-list');

function showEmojiList() {
   if (this.emoji_list.style.display == 'none') {
      this.emoji_list.style.display = 'block';
      this.emoji_list.style.height = '200px';
      this.emoji_list.style.width = '90%';
   } else {
      this.emoji_list.style.display = 'none';
      this.emoji_list.style.height = '0';
      this.emoji_list.style.width = '0';
   }
}

function inserirEmoji($id) {
   var input = document.getElementById('msg-input');
   var emoji = document.getElementById($id);
   input.value = input.value + emoji.id;
   this.emoji_list.style.display = 'none';
   this.emoji_list.style.height = '0';
   this.emoji_list.style.width = '0';
   input.focus();
}

ChatRoom.PHP - 这是聊天控制器

public function sendMessage(Request $request)
{
   $user = $request->user();
   $room = $this->room;
   $body = $this->body;
   dd(html_entity_decode($body));
   if (!$body) {
      $this->addError('body','Digite uma mensagem.');
      return;
   }
   $message = Message::create([
       'body' => $body,'user_id' => $user->id,'room_id' => $this->room->id
   ]);
        
   event(new MessageCreated($user,$room,$message));
   return view('livewire.chat-room')->with(compact('room'));
}

在第 6 行调用dd(); 返回一个空字符串,除非我在插入的表情符号旁边输入一些内容,如果我输入一些内容并稍后插入表情符号,表情符号在字符串中变为空...

PS:chat-room.blade.PHP - 这是一个 Laravel/Livewire 组件刀片

解决方法

PHP documentation for html_entity_decode() reads

编码

定义转换字符时使用的编码的可选参数。

如果省略,编码默认为 default_charset 配置选项的值。

尽管此参数在技术上是可选的,但强烈建议您为代码指定正确的值,如果 default_charset 配置选项可能设置不正确 给定输入。

支持以下字符集:

See documentation for list of charsets

,

秘密就在这里: 在使用所选表情符号填充输入的 javascript 内联函数中,一旦填充输入,它应该更新 Livewire wire:model 调用的值:

@this.set('body',input.value);
function inserirEmoji($id) {
   var input = document.getElementById('msg-input');
   var emoji = document.getElementById($id);
   input.value = input.value + emoji.id;
   @this.set('body',input.value);
   this.emoji_list.style.display = 'none';
   this.emoji_list.style.height = '0';
   this.emoji_list.style.width = '0';
   input.focus();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?