我有以下函数,可将特殊重音符(例如ă)转换为字符串中的a-zA-Z字符:
function tradu($sir){
$sir_aux = $sir;
$diacritice = array("ă"=>"a", "â"=>"a", "î"=>"i", "Î"=>"I", "ș"=>"s", "ş"=>"s", "ţ"=>"t", "ț"=>"t");
for($i=0; $i<strlen($sir_aux); $i++){
foreach($diacritice as $key=>$value){
if($sir_aux[$i]==$key)
$sir_aux[$i]=$value;
}
}
$sir_aux = strtr($sir, $diacritice);
return $sir_aux;
}
假设a是原始字符串,而a_translated是转换后的字符串。
当我使用strpos(a, string_to_find)
和strpos(a_translated, string_to_find)
时,返回的值是不同的。我还检查了strlen(a)
和strlen(a_translate)
,它们给出了不同的结果。
为什么会这样呢?
我需要这种解释,因为我需要搜索带有重音符号的字符串是否包含给定的普通字符串(不带重音符号),但是即使包含重音符号,我也必须从找到它的原始字符串中返回该部分。
我尝试了什么
我翻译原始字符串并找到searched_string开始的位置,然后我substr(ORIGINAL_STRING, position)
。这是我注意到位置不对应的地方。
例:
原始字符串:Universitatea在2001年开设了一个娱乐场
搜索的字符串:infiintata
理想的结果:2001年宾夕法尼亚州的一个办公室。
参考方案
您从strpos
获得的位置不正确,因为原始字符串是多字节的,而strpos
无法处理多字节的字符串。尝试使用mb_strpos。
尝试:
mb_strpos(a,string_to_find,0,'UTF-8');
和
mb_strpos(a_translated,string_to_find,0,'UTF-8');
您将看到它们具有相同的结果。
请参阅以下代码,演示strpos(无法处理多字节字符串)和mb_strpos之间的区别:
$original_multibyte_string = 'țată în HERE';
$a_non_multibyte_str_same_length = '123456789HERE';
// HERE is on 10th (index 9 on array) character
echo 'strpos finds HERE in multibyte at: '.strpos($original_multibyte_string,'HERE').' '.'strpos finds HERE in non-multibyte at: '.strpos($a_non_multibyte_str_same_length,'HERE');
// OUTPUTS: strpos finds HERE in multibyte at: 12 strpos finds HERE in non-multibyte at: 9
echo "\n";
// now lets test the multibyte:
echo 'mb_strpos finds HERE in multibyte at: '.mb_strpos($original_multibyte_string,'HERE',0,'UTF-8').' '.'mb_strpos finds HERE in non-multibyte at: '.mb_strpos($a_non_multibyte_str_same_length,'HERE',0,'UTF-8');
// OUTPUTS: mb_strpos finds HERE in multibyte at: 9 mb_strpos finds HERE in non-multibyte at: 9
http://3v4l.org/ksYal
PHP:将数组值加在一起 - php我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…
PHP JQuery复选框 - php我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(…
如何从php中获取datatables jQuery插件的json数据 - php我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…