我在JS中有一个简单的代码,如果涉及特殊字符,我无法在PHP中复制.
这是JS代码(请参阅JSFiddle输出):
var str = "t??"; //char "t" and special characters, emojis, etc..
document.write("Length is: "+str.length); // Length is: 19
for(var i=0; i<str.length; i++) {
document.write("<br> charCodeAt(" + i + "): " + str.charCodeAt(i));
}
Run Code Online (Sandbox Code Playgroud)
第一个问题是PHP strlen()并且mb_strlen()已经给出了JS的不同结果(strlen:39,mb_strlen:11),但是我设法使用自定义JS_StringLength函数(由于这个 SO答案).
这是我到目前为止在PHP中的内容(请参阅phpFiddle输出):
<?php
function JS_StringLength($string) {
return strlen(iconv('UTF-8', 'UTF-16LE', $string)) / 2;
}
function JS_charCodeAt($str, $index){
//not working!
$char = mb_substr($str, $index, 1, 'UTF-8');
if (mb_check_encoding($char, 'UTF-8'))
{
$ret = mb_convert_encoding($char, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在迁移中获取容器 - 以及通过它提供的服务(使用 Symfony 5.1.2 和学说/迁移 3.0.1)。但是当我尝试根据这个例子创建一个类时:
class Version20200717072537 extends AbstractMigration implements ContainerAwareInterface
{
use ContainerAwareTrait;
public function postUp(Schema $schema) : void
{
$fooService = $this->container->get('app.foo');
//...
}
}
Run Code Online (Sandbox Code Playgroud)
...我尝试运行迁移,但出现Call to a member function get() on null错误。
所以由于某种原因容器为空。
我还尝试用我在其中找到use ContainerAwareTrait;的实际setContainer函数替换,看起来该setContainer函数从未被调用过。
我很确定一段时间前我能够根据我上面链接的示例从迁移中获取容器(可能在 Symfony 3 或 4 中?),但现在我不知道这是否是 Symfony 中的预期行为5,或者是一个bug,或者我做错了什么。
在将此标记为重复之前,请阅读以下内容,并检查我的代码*我的更新代码!
所以我的问题是,我必须实现Java/JavaScript'>>>'(无符号右移/零填充右移),但我无法以完全相同的方式工作.
我已经选择了我在SO和Web上找到的11个最有希望的实现(链接在代码中添加为注释)并添加了一些测试用例.不幸的是无功能返回的Java/JS相同响应所有的测试.(也许其中一些只在32位系统上工作)
实时代码+ JS + PHP结果演示(点击运行):
http://phpfiddle.org/main/code/bcv7-bs2q*
http://phpfiddle.org/main/code/dpkw-rxfe
最接近的功能是:
// http://stackoverflow.com/a/27263298
function shr9($a,$b) {
if($a>=0) return $a>>$b;
if($b==0) return (($a>>1)&0x7fffffff)*2+(($a>>$b)&1);
return ((~$a)>>$b)^(0x7fffffff>>($b-1));
}
Run Code Online (Sandbox Code Playgroud)
和
// http://stackoverflow.com/a/25467712
function shr11($a, $b) {
if ($b > 32 || $b < -32) {
$m = (int)($b/32);
$b = $b-($m*32);
}
if ($b < 0)
$b = 32 + $b;
if ($a < 0)
{
$a = ($a >> 1);
$a &= 2147483647;
$a …Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 javascript 演示 api 调用以获取 Json 结果。这是我所做的:
<!DOCTYPE html>
<html>
<head>
</head>
<script src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script>
<body>
<div class="render-form">
<script>
$(document).ready(function() {
$.ajax({
type: 'GET',
headers:{
'Accept': 'application/json',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
url: 'http://127.0.0.1:8080/activiti-rest/service/form/form-data?taskId=21159',
dataType: 'json',
success: function (data) {
alert(JSON.stringify(data));
}
});
})
</script>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我得到了一个错误:
CORS 政策已阻止在“ http://127.0.0.1:8080/activiti-rest/service/form/form-data?taskId=21159 ”处访问 XMLHttpRequest来自源“ http://localhost ”:响应预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
在这里搜索了很多帖子后,我补充说:
headers:{
'Accept': 'application/json',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
Run Code Online (Sandbox Code Playgroud)
但它仍然无法处理该错误。我应该如何解决这个问题?
任何答复将不胜感激!
非常感谢!
我在 Underscore.js 中遇到了这段代码,我想将其转换为普通的 javascript。关于如何做到这一点有什么想法吗?
var makeLetters = function(word) {
return _.map(word.split(''), function(character) {
return { name: character, chosen: false };
});
}
Run Code Online (Sandbox Code Playgroud)
这是上述函数的当前输出,我想保留相同的结构,但我想在常规 JavaScript 中完成此操作。
0: {name: "s", chosen: false, $$hashKey: "003"}
1: {name: "c", chosen: false, $$hashKey: "004"}
2: {name: "o", chosen: false, $$hashKey: "005"}
3: {name: "p", chosen: false, $$hashKey: "006"}
4: {name: "e", chosen: false, $$hashKey: "007"}
Run Code Online (Sandbox Code Playgroud)