【问题标题】:how to remove ‏ and ascii character from string with php如何使用php从字符串中删除‏和ascii字符
【发布时间】:2020-09-06 12:06:13
【问题描述】:

我将讨论我的问题以及它是如何解决的 我的数据库sql

-- phpMyAdmin SQL Dump
-- version 4.7.9
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Sep 07, 2020 at 07:54 AM
-- Server version: 10.1.31-MariaDB
-- PHP Version: 5.6.34

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


CREATE TABLE `ddrugs` (
  `id` int(11) NOT NULL,
  `code` varchar(20) NOT NULL,
  `multicodes` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



INSERT INTO `ddrugs` (`id`, `code`, `multicodes`) VALUES
(13916, '10013916', '6221075051207,10013916,6221075050750, 6221075051207‏');


ALTER TABLE `ddrugs`
  ADD PRIMARY KEY (`id`);


ALTER TABLE `ddrugs`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13917;
COMMIT;

我的数据库中有包含多码的项目 在向项目添加额外代码之前,我应该检查是否存在 当我检查它时没有找到但实际上它找到了,检查控制台后我在代码后找到‏,这是在编辑期间生成并防止匹配

主要问题来自对utf8的编码查询结果以及这个函数convert_ascii解决的问题,

第二个错误是我尝试从整个提交的多代码中替换 ‏ 而无需迭代,但这不是麻烦的主要原因

我的 php 代码

function convert_ascii($string) 
{ 
    // Replace Single Curly Quotes
    $search[]  = chr(226).chr(128).chr(152);
    $replace[] = "'";
    $search[]  = chr(226).chr(128).chr(153);
    $replace[] = "'";
    
    // Replace Smart Double Curly Quotes
    $search[]  = chr(226).chr(128).chr(156);
    $replace[] = '"';
    $search[]  = chr(226).chr(128).chr(157);
    $replace[] = '"';
    
    // Replace En Dash
    $search[]  = chr(226).chr(128).chr(147);
    $replace[] = '--';
    
    // Replace Em Dash
    $search[]  = chr(226).chr(128).chr(148);
    $replace[] = '---';
    
    // Replace Bullet
    $search[]  = chr(226).chr(128).chr(162);
    $replace[] = '*';
    
    // Replace Middle Dot
    $search[]  = chr(194).chr(183);
    $replace[] = '*';

    // Apply Replacements
    $string = str_replace($search, $replace, $string);
    
    // Remove any non-ASCII Characters
    $string = preg_replace("/[^\x01-\x7F]/","", $string);
    
    return $string; 
}     
        

 


echo "<pre>";
error_reporting(1);
$mysqli = new mysqli('localhost', 'root', '', 'egpharmacy');

$sql = "SELECT * FROM `ddrugs` WHERE `id` = 13916;";
$results = $mysqli -> query($sql);
$result = $results->fetch_object();
echo "<input type='text'  value='$result->multicodes' style='width:600px;' /><br>";
$result->multicodes = array_unique(explode(',', $result->multicodes) );
$array = $result->multicodes ;
$array2 = [];
foreach($result->multicodes as $key => $val){
    $val = trim("$val") ;
    $val = str_replace('&rlm;' , '' , $val );
    $val = str_replace('?' , '' , $val );
    $val = convert_ascii($val)  ;
    echo var_dump((($val))) .'<br>';
    if(!in_array( $val , $array2 )){
        array_push($array2 , $val );
    }
    
}
print_r($array2);

我附上照片以显示它在控制台中的显示方式

【问题讨论】:

  • 你考虑过使用正则表达式吗?
  • 使用str_replace()删除有什么问题?
  • 这能回答你的问题吗? How to remove part of a string?
  • 显示您的代码,&amp;rlm 的菱形更多的是一个问题,然后简单地删除它。我过去已经解决了这个问题,也许你感兴趣:stackoverflow.com/questions/21322702/…
  • 我分享我的代码以及它是如何解决的,感谢您的帮助

标签: php


【解决方案1】:

您必须在输出时将其删除。

例如你的数组:

    // your array with &rlm;
    $myarray = array('63252523534','35235235235&rlm','35523525','325235235532&rlm','352523532');
    
    // create a new array
    $newarray = array();
    
    // foreach your array which contains &rlm; in elements.
    
    foreach ($myarray as $marr){
//remove &rlm; from your strings and add them to your new array
        $newarray[] = str_replace('&rlm;','',$marr);
    }
    // you have the new array without &rlm
    print_r($newarray);

结果:

Array
(
    [0] => 63252523534
    [1] => 35235235235
    [2] => 35523525
    [3] => 325235235532
    [4] => 352523532
)

【讨论】:

  • 这个rlm在浏览器中不可见,它是在从databsse获取结果时生成的
  • “在浏览器中不可见”是什么意思?
  • 好吧。但是如何将它们输出到浏览器?因为在正式输出给用户之前,您可以随心所欲地使用它。
  • 我尝试修剪和剥离标签和 str_replace 所有这些都不起作用 - 因为主要问题来自 mysql 连接的 utf8 编码和函数 convert_ascii 解决的问题,非常感谢您的关心
猜你喜欢
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
相关资源
最近更新 更多